2016-03-26 26 views
1

在Swift中,應該使用參數類型或返回值來隱式地專用通用函數。問題是,當我這樣調用函數:爲什麼明確地專門化泛型函數是不允許的?

func serialize<T>(continuation: GenericWithLongName<T, NSError> -> Void) -> Void 

我不能只是寫

serialize<SomeType> { 
    obj in 
    ... 
} 

應該

serialize { 
    (obj: GenericWithLongName<SomeType, NSError>) -> Void in 
    ... 
} 

看起來痛苦。

看起來這個「功能」存在了很長一段時間。這是一個設計決定嗎?允許明確的專業化有什麼負面影響嗎?

有沒有什麼辦法可以使上面的代碼整潔乾淨而不會重構那個泛型類?

回答

2

的一種方式,以「專業」的功能是通過包括通用型作爲函數參數:

func serialize<T>(
    t: T.Type, 
    continuation: GenericWithLongName<T, NSError> -> Void) -> Void { } 

現在,你可以在「專業」的功能是這樣的:

serialize(SomeType.self) { 
    obj in 
    ... 
} 

我不不知道爲什麼你的請求功能不可用的答案。我同意你推薦的功能會很有用,但同時它的工作原理和幾乎一樣簡潔。

相關問題