我想知道是否可以在
Swift中完成类似java(或c)的操作:
protocol Prot1 { func returnMyself() -> Prot1 }
并且一个类符合协议Prot1.
我可以强制函数returnMyself()的返回类型与下面的类的类型相同吗?
class MyClass: Prot1 { public func returnMyself() -> MyClass { return self } }
可能吗?
解决方法
只需将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 } }
现在一个类只需要像这样符合Animal
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() } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。