具有类型别名的协议中的AssociatedType

时间:2018-12-12 08:18:15

标签: ios swift

让我说我有一个协议:

protocol Router {
    associatedtype Answer
    typealias AnswerCallback = (Answer) -> Void
}

在某个时候我想存储一个类型为AnswerCallback的变量

var answerCallback: Router.AnswerCallback ...

但是我需要指定我正在使用的具体类型,因为出现此错误:

  

类型别名“ AnswerCallback”只能与具体类型或   通用参数库

如何指定类似Router.AnswerCallback ...的类型,其中String是“ Answer”类型?

相反,唯一的工作方法是使用var answerCallback: ((String) -> Void)

1 个答案:

答案 0 :(得分:4)

您需要一个符合Router且其AnswerString的类/结构:

class StringRouter : Router {
    typealias Answer = String
}

let callback: StringRouter.AnswerCallback? = nil

如果您想要的只是这样的类型别名,则不需要协议:

typealias AnswerCallback<T> = (T) -> Void