简体   繁体   English

具有类型的协议中的AssociatedType

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM