扩展一个符合协议的Class?

Extend a Class that conforms a protocol?

如何扩展实现协议的 class?

类似的东西:

protocol proto {
    func hey()
}

和符合proto的class:

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

然后 class 的扩展看起来像:

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

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

谢谢。

首先,您必须在 proto 中声明 test 方法,以便 MyClass 知道它实现了此方法。

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

您还必须 "reverse" 协议扩展中的语句:

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

在那之后,MyClass被神奇地扩展了,你可以在上面调用test方法:

class MyClass: UIViewController, proto {

    override func viewDidLoad() {
        super.viewDidLoad()
        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!")
    }
}