2017-02-17 100 views
0

我的协议中有一个typealias。我必须将typealias添加到符合类型还是有其他选择?我的目标是声明一次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。

+4

嗯,你试图消除它的查看发生了什么? – Alexander

+0

林问我是否使用typealias,是否需要再次包含它。 – efremidze

回答

-1

你不一定需要在structtypealias - 它可以推断出:

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) 
+0

其不推测 – efremidze

+0

你是什么意思?在操场上试试这个例子。你不需要在结构中使用'typealias'。 –

+0

你使用'var blocks:[(T) - > Void]'而不是'var blocks:[Closure]'。如果我像那样使用它,它会起作用,但那不是问题。 – efremidze