所以我想做这样的事情:

protocol CanShowView: class where Self: UIViewController, SomeDelegate{
func someFunction()
}

extension CanShowView{
func someFunction(){
someView.SomeDelegate = self
}

基本上,我想确保该协议只能由同时实现SomeDelegate协议的UIViewController实现,但是xcode对示例中的第一行代码感到恼火。

最佳答案

如果您使用的是Swift 4+:

protocol CanShowView {
    func someFunction()
}

extension CanShowView where Self: UIViewController & SomeDelegate {
    func someFunction() {
        someView.SomeDelegate = self
    }
}

如果是Swift 3.0:
protocol CanShowView {
    func someFunction()
}

extension CanShowView where Self: UIViewController, Self: SomeDelegate {
    func someFunction() {
        someView.SomeDelegate = self
    }
}

这是添加条件扩展的正确方法,而不是在协议定义中。如果您想将协议限制为某种约束,最好的方法是使用associatedType

09-28 06:32