为什么我需要指定对象类型两次?
Why do I need to specify the object type twice?
给这个方法签名,它是协议的扩展:
loadObjectFromDB<T: DBObject>(_ db: ALBNoSQLDB, for key: String, queue: DispatchQueue? = nil, completion: @escaping (T) -> Void) -> DBCommandToken?
为什么我不能这样称呼它? (Category是一个遵守协议的结构体)
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
}
因为 T
的唯一限制是它是一个 DBObject
,编译器对它一无所知。如果它被限制为 Self
,那么您就不必明确声明类型。
给这个方法签名,它是协议的扩展:
loadObjectFromDB<T: DBObject>(_ db: ALBNoSQLDB, for key: String, queue: DispatchQueue? = nil, completion: @escaping (T) -> Void) -> DBCommandToken?
为什么我不能这样称呼它? (Category是一个遵守协议的结构体)
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
}
因为 T
的唯一限制是它是一个 DBObject
,编译器对它一无所知。如果它被限制为 Self
,那么您就不必明确声明类型。