繁体   English   中英

扩展符合协议的类?

[英]Extend a Class that conforms a protocol?

如何扩展实现协议的类?

像这样的东西:

protocol proto {
    func hey()
}

和一个符合proto的类:

Class MyClass: UIViewController, proto {
     func hey() {
         print("Hey!")
     }
}

然后是该类的扩展,看起来像:

extension UIViewController where Self:proto {
     func test() {
         print("I'm extended!")
     }
}

这样我就可以在MyClass调用self.test()

谢谢。

您可以只扩展协议,而不是类型。 请尝试以下方法:

protocol proto {
    func hey()
}

class MyClass: UIViewController, proto {
    func hey() {
        print("Hey!")
    }

    func test2() {
        self.test()
    }
}

extension proto where Self: UIViewController {
    func test() {
        print("I'm extended!")
    }
}

首先,你必须在proto声明test方法,以便MyClass知道它实现了这个方法。

protocol proto {
    func hey()
    func test()
}

您还必须“反转”协议扩展中的语句:

extension proto where Self : UIViewController {
    func test() {
        print("I'm extended!")
    }
}

之后, MyClass被神奇地扩展,您可以在其上调用test方法:

class MyClass: UIViewController, proto {

    override func viewDidLoad() {
        super.viewDidLoad()
        test()
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM