我想创建一个数组扩展,其中数组的Element是可选的,方法的返回类型是非可选的Element Type。
是否可能,如果是,语法是什么?
主要思想是伪代码:
extension Array where Element: Optional {
func foo() -> ReturnType<Wrapped<Element>> {
...
}
}
我不确定您对Wrapped<Element>
的含义,但是由于您需要返回某些内容,所以为什么不对返回值使用闭包,例如使用此函数来使元素位于特定索引处
extension Array {
func value<T>(at index: Int, emptyAction: () -> T) -> T where Element == T? {
if let value = self[index] {
return value
}
return emptyAction()
}
}
示例
var test = [String?]()
test.append("ABC")
test.append("DEF")
test.append(nil)
for i in 0..<test.count {
print(test.value(at: i, emptyAction: { "<empty>" }))
}
输出
ABC
DEF
<empty>