让我说我有一个协议:
protocol Router {
associatedtype Answer
typealias AnswerCallback = (Answer) -> Void
}
在某个时候我想存储一个类型为AnswerCallback的变量
var answerCallback: Router.AnswerCallback ...
但是我需要指定我正在使用的具体类型,因为出现此错误:
类型别名“ AnswerCallback”只能与具体类型或 通用参数库
如何指定类似Router.AnswerCallback ...的类型,其中String是“ Answer”类型?
相反,唯一的工作方法是使用var answerCallback: ((String) -> Void)
答案 0 :(得分:4)
您需要一个符合Router
且其Answer
为String
的类/结构:
class StringRouter : Router {
typealias Answer = String
}
let callback: StringRouter.AnswerCallback? = nil
如果您想要的只是这样的类型别名,则不需要协议:
typealias AnswerCallback<T> = (T) -> Void