【问题标题】:Typealias inside Protocol协议中的类型别名
【发布时间】:2017-02-17 01:16:35
【问题描述】:

我的协议中有一个类型别名。我是否必须将 typealias 添加到符合类型或是否有替代方法?我的目标是声明 typealias 一次。

protocol SomeProtocol {
    associatedtype T
    typealias Closure = (T) -> Void
    var blocks: [Closure] { get set }
}

struct SomeStruct<T>: SomeProtocol {
    typealias Closure = (T) -> Void // <- do I have to add this?
    var blocks: [Closure]  
}

仅供参考,这可行。我只是在寻找更简单的 typealias 实现。

【问题讨论】:

  • 好吧,你试过删除它看看会发生什么吗?
  • 我问我是否使用类型别名,是否需要再次包含它。

标签: ios swift swift3 protocols type-alias


【解决方案1】:

你不一定需要struct中的typealias——可以推断:

protocol SomeProtocol {
    associatedtype T
    typealias Closure = (T) -> Void
    var blocks: [Closure] { get set }
}

struct SomeStruct<T>: SomeProtocol {
    var blocks: [(T) -> Void]
}

let someStruct = SomeStruct<Int>(blocks: [{someInt in print(someInt)}])
someStruct.blocks[0](123)

【讨论】:

  • 什么意思?在操场上试试这个例子。你不需要在结构中使用typealias
  • 你使用var blocks: [(T) -&gt; Void] 而不是var blocks: [Closure]。如果我这样使用它会起作用,但这不是问题。
  • 你能澄清你的问题吗?你想完成什么?
  • 我试图找到一种方法来继续使用 typealias 而不必定义它两次
  • 啊。嗯,这确实是一个不同的问题。
猜你喜欢
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
相关资源
最近更新 更多