NSCountedSet泛型函数

时间:2019-07-18 13:10:44

标签: swift generics nscountedset

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

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协议:

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

和:

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

这给了我这个错误:

  

实例成员'identifier'不能用于类型'T'

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

  

参数类型“ Person.Type”与预期的类型“ Identifiable”不符

我想念的是什么,有办法让它正常工作吗?

1 个答案:

答案 0 :(得分:1)

我认为您甚至不需要$user_model = User::where('name', 'LIKE', '%' . $q . '%') ->orWhere('email', 'LIKE', '%' . $q . '%') ->orderBy('name'); if ($role == "SEE_DEPT_A") { $user_model->where('user_department', "A"); } ... //other if statements ... $users = $user_model->paginate(10)->appends('q', $q); 。您可以像这样

Generics

如果public func countFor(identifier: String) -> Int { let p = self.compactMap { $0 as? Identifiable }.filter { $0.identifier == identifier } return self.count(for: p) } 包含具有相同set的不同类型的Identifiable元素,则可以使用以下方法来解决它,

identifiers