2017-02-17 111 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