我尝试创建协议,该协议只能由继承自UIView
的类实现,当这段代码编译没有错误时(在Swift 3.0中)我感到惊讶:
protocol TestsProtocol {
func test()
}
extension TestsProtocol where Self: UIView { }
class FooClass: TestsProtocol {
func test() {
}
}
我们可以看到FooClass
没有从UIView
继承,使用协议扩展我不想强制只有从UIView
继承的类才能实现它。
据我记得,这不会在Swift 2.1中编译
答案 0 :(得分:2)
你不能在Swift中这样做。扩展语法还有其他功能:
extension TestsProtocol where Self: UIView {
func useful() {
// do something useful
}
}
现在任何实现TestsProtocol并且是UIView(或子类)的类也都有有用的()函数。
答案 1 :(得分:0)
您可以通过限制协议轻松地做到这一点,因为它可以扩展到UIView以外的任何类型:
protocol TestsProtocol:UIView {
func test()
}
class FooClass: TestsProtocol {
func test() {
}
}
所以这会导致编译错误
“ TestsProtocol”要求“ FooClass”从“ UIView”继承