所选类实例的Swift扩展
发布时间:2020-12-14 05:25:16 所属栏目:百科 来源:网络整理
导读:在Objective-C类别中,您可以通过在类中包含类别的标题来引入类别方法引入的扩展功能. 似乎所有Swift扩展都是在没有导入的情况下自动引入的.你如何在Swift中实现同样的目标? 例如: extension UIView { // only want certain UIView to have this,not all //
在Objective-C类别中,您可以通过在类中包含类别的标题来引入类别方法引入的扩展功能.
似乎所有Swift扩展都是在没有导入的情况下自动引入的.你如何在Swift中实现同样的目标? 例如: extension UIView { // only want certain UIView to have this,not all // similar to Objective-C,where imported category header // will grant the capability to the class func extraCapability() { } }
定义一个将作为选择的协议,扩展应该是否可用:
protocol UIViewExtensions { } 然后定义协议的扩展,但仅限于UIView的子类(反过来不起作用): extension UIViewExtensions where Self: UIView { func testFunc() -> String { return String(tag) } } 定义为具有协议的类也将具有扩展名: class A: UIView,UIViewExtensions { } A().testFunc() //has the extension 如果没有定义协议,它也没有扩展名: class B: UIView {} B().testFunc() //execution failed: MyPlayground.playground:17:1: error: value of type 'B' has no member 'testFunc' UPDATE 从protocol extensions don’t do class polymorphism开始,如果你需要覆盖函数,我唯一能想到的就是子类: class UIViewWithExtensions: UIView { override func canBecomeFocused() -> Bool { return true } } UIViewWithExtensions().canBecomeFocused() // returns true 这也可以与扩展相结合,但我认为它不再有意义了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |