我想扩展Optional,其中Wrapped是一个数组(包含任何类型的元素).换句话说,我想为[Any]添加一个函数?我只是不确定如何宣布.我试过了:
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>'
和其他各种类似的声明.感谢帮助.
最佳答案 是的,这里的问题是,在这一行,
extension Optional where Wrapped: Array<Any>
‘Array’应该是一种协议,更通用的方式:
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
希望能帮助到你 :)