Swift ограничение на тип дженерика

Хочу чтобы тип дженерика был либо Int либо например String. Плюс к этому класс должен реализоваться протокол Container. Не понимаю как синтаксически это сделать. Пример достаточно искусственный, но тем не менее.

protocol Container {
    associatedtype Item
    var id: Item { get }
    func getID()->Item
}

// Что здесь нужно написать ?
class Cont<T>: Container{
    func getID() -> T {
        return id
    }

    var id: T
    
    init(_ value: T) {
        id = value
    }
}

Ответы (1 шт):

Автор решения: schmidt9

Можно сделать ограничение через расширения типов, реализующих один и тот же протокол

protocol Container {
    associatedtype Item
    var id: Item { get }
    func getID()->Item
}

protocol Constraints {}

extension Int: Constraints {}
extension String: Constraints {}

class Cont<T: Constraints>: Container {
    
    func getID() -> T {
        return id
    }

    var id: T
    
    init(_ value: T) {
        id = value
    }
}

let c1 = Cont(4)
let c2 = Cont("str")
→ Ссылка