gpt4 book ai didi

ios - 如何在集合类型约束中创建泛型?

转载 作者:行者123 更新时间:2023-11-30 12:34:24 24 4
gpt4 key购买 nike

我一直在尝试从字符串数组中提取非零值。就像下面这样。但是,我的前辈希望它也能够从其他类型中提取非零值

我读到,泛型可以帮助我处理不同的类型。如何使用泛型,以便我可以使用以下类似扩展来处理其他类型?

getNonNil 必须返回提取的特定类型的非零值(即如果数组是 [String?] 则必须返回 [String],如果 [Int?] 则返回 [Int]。 ])

因为我必须做进一步的计算。

我尝试过的方法如下:

import Foundation
// Extended the collection-type so that collectiontype is constrained to having element with optional strings
extension CollectionType where Self.Generator.Element == Optional<String>{
func getNonNil() -> [String] {
// filter out all nil elements and forcefully unwrap them using map
return self.filter({$0 != nil}).map({$0!})
}
}

// Usage
let x: [String?] = ["Er", "Err", nil, "errr"]

x.getNonNil().forEach { (str) in
print(str)
}

最佳答案

对于getNonNil,您可以简单地使用

x.flatMap { $0 }
// returns ["Er", "Err", "errr"] which is [String]
<小时/>

对于最初的问题,通常您可以向可选类型引入协议(protocol)(例如通过 muukii/OptionalProtocol 包):

protocol OptionalProtocol {
associatedtype Wrapped
var value: Wrapped? { get }
}

extension Optional: OptionalProtocol {
public var value: Wrapped? { return self }
}

extension CollectionType where Self.Generator.Element: OptionalProtocol {
func getNonNil() -> [Self.Generator.Element.Wrapped] {
...
}
}

关于ios - 如何在集合类型约束中创建泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43066713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com