我想知道是否可以在Swift中完成类似java(或c ++)的事情:
我有一个协议:
protocol Prot1 {
func returnMyself() -> Prot1
}
一个类符合协议Prot1
。
我可以强制函数returnMyself()
的返回类型与下面的类相同吗?
class MyClass: Prot1 {
public func returnMyself() -> MyClass {
return self
}
}
有可能吗?
答案 0 :(得分:6)
Self
protocol Prot1 {
func returnMyself() -> Prot1
}
protocol Animal {
func mySelf() -> Self
}
class Feline: Animal {
func mySelf() -> Self {
return self
}
}
class Cat: Feline { }
Feline().mySelf() // Feline
Cat().mySelf() // Cat
你也可以在像这样的协议扩展中使用Self
protocol Animal {}
extension Animal {
func mySelf() -> Self {
return self
}
}
现在一个类只需要像这样符合动物
class Feline: Animal { }
class Cat: Feline { }
class Dog: Animal {}
并自动获取方法
Feline().mySelf() // Feline
Cat().mySelf() // Cat
Dog().mySelf() // Dog
protocol ReadableInterval { }
class Interval: ReadableInterval { }
protocol ReadableEvent {
associatedtype IntervalType: ReadableInterval
func getInterval() -> IntervalType
}
class Event: ReadableEvent {
typealias IntervalType = Interval
func getInterval() -> Interval {
return Interval()
}
}
答案 1 :(得分:2)
protocol Prot1
{
associatedtype T
func returnMyself() -> T
}
class MyClass : Prot1
{
typealias T = MyClass
func returnMyself() -> T
{
return self
}
}