2016-11-04 78 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 

希望它能帮助:)