数组扩展,其中Element是可选的,返回类型为Wrapped [duplicate]

问题描述 投票:0回答:1

我想创建一个数组扩展,其中数组的Element是可选的,方法的返回类型是非可选的Element Type。

是否可能,如果是,语法是什么?

主要思想是伪代码:

extension Array where Element: Optional {
  func foo() -> ReturnType<Wrapped<Element>> {
    ...
  }
}
arrays swift generics optional
1个回答
2
投票

我不确定您对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>
© www.soinside.com 2019 - 2024. All rights reserved.