要查看在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”不符
我想念的是什么,有办法让它正常工作吗?
答案 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