[英]AssociatedType in a protocol with typealias
Lets say i have a protocol: 让我们说我有一个协议:
protocol Router {
associatedtype Answer
typealias AnswerCallback = (Answer) -> Void
}
At some point I want to store a variable of type AnswerCallback 在某些时候,我想存储一个类型为AnswerCallback的变量
var answerCallback: Router.AnswerCallback ...
But I need to specify which concrete type i'm using since i get this error: 但我需要指定我正在使用的具体类型,因为我收到此错误:
Type alias 'AnswerCallback' can only be used with a concrete type or generic parameter base
别名'AnswerCallback'只能与具体类型或通用参数库一起使用
How I can specify a type like Router.AnswerCallback ... where String is "Answer" type? 我如何指定类型如Router.AnswerCallback ...其中String是“Answer”类型?
Instead the only way to work is to use var answerCallback: ((String) -> Void)
相反,唯一的工作方式是使用
var answerCallback: ((String) -> Void)
You need a class/struct that conforms to Router
, which has an Answer
of String
: 你需要一个符合
Router
的类/结构,它有一个String
of Answer
:
class StringRouter : Router {
typealias Answer = String
}
let callback: StringRouter.AnswerCallback? = nil
If all you want is such a type alias, you don't need a protocol: 如果您只想要这样的类型别名,则不需要协议:
typealias AnswerCallback<T> = (T) -> Void
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.