Swift: Как я могу объявить func в протоколе с возвращаемым типом self? - PullRequest
0 голосов
/ 24 ноября 2018

Я хочу сделать что-то подобное (это не скомпилированный код, потому что это всего лишь пример того, что я хочу получить в конечном итоге):

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

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

Мне нужно это как результат let vc = A.perform(), означает, что мне нужен протокол, который будет возвращать сам тип абонента

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Я думаю, что это должно делать то, что вы хотите:

protocol AP {
    associatedtype T

    static func perform() -> T
}

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

Теперь вы можете делать это так, как вы хотели:

let vc = A.perform()
0 голосов
/ 24 ноября 2018
  1. Используйте статический метод, а не метод класса в вашем протоколе.
  2. Дайте тип возвращаемого значения.Self не является типом возврата.

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