gpt4 book ai didi

swift - NSCountedSet 泛型函数

转载 作者:行者123 更新时间:2023-11-28 13:32:47 28 4
gpt4 key购买 nike

为了查看在 NSCountedSet 中出现了多少个具有特定标识符的 Person 对象,我创建了以下函数:

public extension NSCountedSet {
public func countFor(identifier: String) -> Int {
let p = self.compactMap { $0 as? Person }.filter { $0. identifier == identifier }

return self.count(for: p)
}
}

效果很好,但它非常适合 Person

所以我试图让它变得通用:

public func countFor<T: Identifiable >(type: T, identifier: String) -> Int {
let p = self.compactMap { $0 as? T.Type }.filter { $0. identifier == identifier }

return self.count(for: p)
}

Person 符合Identifiable 协议(protocol):

public protocol Identifiable {
var identifier: String { get }
}

和:

extension Person: Identifiable {
public var identifier: String {
return name
}
}

这给了我这个错误:

Instance member 'identifier' cannot be used on type 'T'

当我调用此函数时,出现以下错误:

Argument type 'Person.Type' does not conform to expected type 'Identifiable'

我错过了什么,有没有办法让它发挥作用?

最佳答案

我认为您甚至不需要泛型。你可以简单地这样做,

public func countFor(identifier: String) -> Int {
let p = self.compactMap { $0 as? Identifiable }.filter { $0.identifier == identifier }
return self.count(for: p)
}

如果 set 包含具有相同 identifiers 的不同类型的 Identifiable 元素,您可以使用以下方法解析它,

public func countFor<T: Identifiable>(type: T, identifier: String) -> Int {
let p = self.compactMap { $0 as? T }.filter { $0.identifier == identifier }
return self.count(for: p)
}

关于swift - NSCountedSet 泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57095303/

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