无法推断通用参数“T”

时间:2016-08-17 07:18:20

标签: swift xcode generics

我正在尝试创建一个通用函数来比较两个模型的标识符,如果没有相同的标识符则返回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”。

1 个答案:

答案 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)
}