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)
以及其他各种类似的声明。感谢帮助。
我有点迟了,但也许我可以帮忙。
在Swift 4中,您可以执行此操作
extension Optional where Wrapped: Collection {
如果需要访问数组的Element类型,则可以执行以下操作:
Wrapped.Iterator.Element
是的,这里的问题是,在这一行中,
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)
希望能帮助到你 :)