我正在尝试创建一个通用函数来比较两个模型的标识符,如果没有相同的标识符则返回nil。这是功能。
func compareModel<T: ObjectIdentifier, U: ObjectIdentifier>(model: T, models: [U]) -> (index: Int?, model: U?) {
for (index, m) in models.enumerate() {
if model.identifier == m.identifier {
return (index, m)
}
}
return (nil, nil)
}
我这样访问:
let object: (index: Int?, model: Checkout?) = self.compareModel(checkout, models: currentJoborders)
但是我从编译器那里得到了这个错误。
无法推断出通用参数“T”。
答案 0 :(得分:0)
这是因为您的Checkout
结构没有实现ObjectIdentifier
协议。
确保将模型结构定义为struct Checkout: ObjectIdentifier { ... }
更多关于你的func应该是这样的:
func compareModel<T: ObjectIdentifier, U: ObjectIdentifier>(model: T, models: [U]) -> (index: Int, model: U)? {
for (index, m) in models.enumerate() {
if model.identifier == m.identifier {
return (index, m)
}
}
return nil
}
将其用作:
let currentJoborders: [Checkout] = [...]
let checkout: Checkout = ...
if let object: (index: Int, model: Checkout) = compareModel(checkout, models: currentJoborders) {
print(object)
}