提供此方法签名,该签名是协议的扩展:
loadObjectFromDB<T: DBObject>(_ db: ALBNoSQLDB, for key: String, queue: DispatchQueue? = nil, completion: @escaping (T) -> Void) -> DBCommandToken?
为什么我不能这样称呼它? (类别是遵守协议的结构)
let token = Category.loadObjectFromDB(db, for categoryKey) { (category) in
// use category object
}
我收到一个编译错误,说无法推断出通用参数T,我必须在执行块中再次指定类型:
let token = Category.loadObjectFromDB(db, for categoryKey) { (category: Category) in
// use category object
}
答案 0 :(得分:1)
由于T
的唯一约束是它是DBObject
,因此编译器对此一无所知。如果将其限制为Self
,则不必显式声明类型。