只能应用于给定类类型的扩展名

时间:2016-12-27 17:13:46

标签: ios swift

我想创建一个协议,只有从UIView继承的类才能符合。

有办法吗?

即。

protocol MyProtocol {
    fun someMethod()
}

是我的协议

class MyView: UIView, MyProtocol {
    func someMethod() { }
}

工作得很好

class MyObject: NSObject {
    func someMethod()
}

不会编译。

1 个答案:

答案 0 :(得分:2)

两个选项:

  1. 创建其他协议UIViewType,使UIView符合该协议并将MyProtocol约束为UIViewType

    protocol UIViewType {}
    
    extension UIView : UIViewType {}
    
    protocol MyProtocol : UIViewType {}
    
  2. 使用协议扩展名:

    protocol MyProtocol {}
    
    extension MyProtocol where Self : UIView {}