swift – 协议扩展中的’自我’是什么?
发布时间:2020-12-14 05:29:39 所属栏目:百科 来源:网络整理
导读:我看到了很多以下格式的例子 什么是Self在协议扩展中的位置 扩展Protocolname其中Self:UIViewController Self在这里指的是什么,找不到关于此的文档. 该语法是: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Program
我看到了很多以下格式的例子
什么是Self在协议扩展中的位置 扩展Protocolname其中Self:UIViewController Self在这里指的是什么,找不到关于此的文档.
该语法是:
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html#//apple_ref/doc/uid/TP40014097-CH25-ID521
考虑: protocol Meh { func doSomething(); } //Extend protocol Meh,where `Self` is of type `UIViewController` //func blah() will only exist for classes that inherit `UIViewController`. //In fact,this entire extension only exists for `UIViewController` subclasses. extension Meh where Self: UIViewController { func blah() { print("Blah"); } func foo() { print("Foo"); } } class Foo : UIViewController,Meh { //This compiles and since Foo is a `UIViewController` subclass,it has access to all of `Meh` extension functions and `Meh` itself. IE: `doSomething,blah,foo`. func doSomething() { print("Do Something"); } } class Obj : NSObject,Meh { //While this compiles,it won't have access to any of `Meh` extension functions. It only has access to `Meh.doSomething()`. func doSomething() { print("Do Something"); } } 以下将给出编译器错误,因为Obj无法访问Meh扩展函数. let i = Obj(); i.blah(); 但是下面的方法会奏效. let j = Foo(); j.blah(); 换句话说,Meh.blah()仅适用于UIViewController类型的类. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |