У меня есть этот протокол:Обобщения по протоколу
protocol Addable
{
mutating func addNumber(value: Int)
}
и это расширение
extension Int : Addable
{
mutating func addNumber(value: Int)
{
self = self + value
}
}
Этот код:
var number : Int = 10
number.addNumber(10)
println(number)
Правильно печатает 20
Теперь я хочу, чтобы расширить протокол Добавляется к другим типам. Если я правильно понимаю, что я не использую Generics с протоколом, но я использую ассоциированный тип:
protocol Addable
{
typealias AddableType
mutating func addNumber(value: AddableType)
}
Так что теперь, AddableType
означает общий тип, и я могу продлить, например Float
extension Float : Addable
{
mutating func addNumber(value: Float)
{
self = self + value
}
}
var another : Float = 10.5
another.addNumber(10.1)
println(another)
печатается 20,6
Теперь я знаю, что я могу применять соответствующий тип в соответствии с протоколом
protocol Addable
{
typealias AddableType : AProtocol, AnotherProtocol // ...
mutating func addNumber(value: AddableType)
}
Но и здесь это вопрос, я не могу следить за соблюдением соответствия к типу или некоторых типов
protocol Addable
{
typealias AddableType : Int, Float
mutating func addNumber(value: AddableType)
}
Error: Inheritance from non-protocol, non-class type 'Int'
Error: Inheritance from non-protocol, non-class type 'Float'
Есть ли возможность сделать это?
Хорошо, я пришел к тому же решению сразу же после написания вопроса :-) Принимается, потому что вы первый, кто ответил. И из-за подсказки «Я», которая очень полезна. Спасибо и всем остальным, которые ответили – LombaX