2016-11-04 137 views
1

我想擴展Optional,其中Wrapped是一個數組(具有任何類型的元素)。換句話說,我想添加一個功能到[Any]?。我只是不確定如何聲明。我已經試過:Swift:擴展可選陣列

1.

extension Optional where Wrapped: Array 

結果:

error: reference to generic type 'Array' requires arguments in <...> 

2.

extension Optional where Wrapped: Array<Any> 

結果:

type 'Wrapped' constrained to non-protocol type 'Array<Any>' 

和各種其他類似的聲明。幫助表示讚賞。

+2

什麼將這種擴展是,到底是什麼?換句話說,你會希望只添加到'[Any]是什麼功能?' – matt

+0

我想添加一個便利函數,該函數用於:1)如果數組非零,則附加一個元素; 2)初始化只有數組爲零的數組(如果數組爲零)。 – Connor

+2

@ConnorNeville你的意思是'array =(array ?? [])+ [element]'?國際海事組織這並不值得延期(考慮到你必須經過的變通辦法才能實現)。 – Hamish

回答

1

是這裏的問題是,在這條線,

extension Optional where Wrapped: Array<Any> 

的「數組」應該是一個協議,在一個更一般的方式:

extension Type where Element: Protocol 

我得到的解決方案是醜陋的,但作品,考慮一下:

protocol ArrayOfAny {} 
struct ArrayAny<Element: Any>: ArrayOfAny { 
    let array: [Element] 
    init(_ array: [Element]) { 
     self.array = array 
    } 
}  

正因爲如此:

extension Array: ArrayOfAny where Element: Any {} 

不支持......

那麼你可以這樣做:

extension Optional where Wrapped: ArrayOfAny 

希望它能幫助:)