Swift:扩展可选数组

Con*_*nor 6 generics optional swift

我想扩展Optional,其中Wrapped是一个数组(具有任何类型的元素)。换句话说,我想向添加一个函数[Any]?。我只是不确定如何声明。我试过了:

1。

extension Optional where Wrapped: Array
Run Code Online (Sandbox Code Playgroud)

结果是:

error: reference to generic type 'Array' requires arguments in <...>
Run Code Online (Sandbox Code Playgroud)

2。

extension Optional where Wrapped: Array<Any>
Run Code Online (Sandbox Code Playgroud)

结果是:

type 'Wrapped' constrained to non-protocol type 'Array<Any>'
Run Code Online (Sandbox Code Playgroud)

以及其他各种类似的声明。感谢帮助。

Tia*_*ida 6

我有点迟了,但也许我可以帮忙。

在Swift 4中,您可以执行此操作

extension Optional where Wrapped: Collection {

如果需要访问数组的Element类型,则可以执行以下操作:

Wrapped.Iterator.Element


Sto*_*ers 2

是的,这里的问题是,在这一行中,

extension Optional where Wrapped: Array<Any>
Run Code Online (Sandbox Code Playgroud)

“数组”应该是一个协议,以更通用的方式:

extension Type where Element: Protocol 
Run Code Online (Sandbox Code Playgroud)

我得到的解决方案很丑陋但有效,考虑一下:

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

因为这:

extension Array: ArrayOfAny where Element: Any {}
Run Code Online (Sandbox Code Playgroud)

不支持...

那么你可以这样做:

extension Optional where Wrapped: ArrayOfAny
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你 :)