Swift:如何在带有返回类型self的协议中声明func?

时间:2018-11-24 14:04:38

标签: ios swift xcode swift4.2

我想做这样的事情(这不是编译后的代码,因为这只是我最终要接收的示例):

protocol AP {
 class func perform() -> self
}

class A: UIViewController, AP {
//
...
//
 class func perform() -> A {
   return A()
 }
}

我需要此作为结果let vc = A.perform(),这意味着我需要将返回订阅者自身类型的协议

我该怎么做?

2 个答案:

答案 0 :(得分:4)

我认为这应该做您想要的:

protocol AP {
    associatedtype T

    static func perform() -> T
}

class A: UIViewController, AP {
    //
    ...
    //
    class func perform() -> A {
        return A()
    }
}

您现在可以按照需要执行以下操作:

let vc = A.perform()

答案 1 :(得分:0)

  1. 在协议中使用静态方法,而不是类方法。
  2. 给出返回类型。自我不是返回类型。

    protocol AP {
        func perform() -> ()
    }
    
    class A: UIViewController, AP {
        //
            ...
        //
    
        func perform() {
        }
    }