我看到了很多以下格式的例子
什么是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");
- }
- }
- let i = Obj();
- i.blah();
但是下面的方法会奏效.
- let j = Foo();
- j.blah();
换句话说,Meh.blah()仅适用于UIViewController类型的类.