2016-08-17 55 views
0

我想创建一个通用的函数比较两个模型的标识符,并返回nil如果theres没有相等的标识符。这是功能。通用参数“T”无法推断

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

什么'checkout'的类型? – Hamish

+0

这是一个结构模型。 –

+1

您可以发表[mcve]吗?没有看到你想要调用'compareModel',很难说出什么问题。 – Hamish

回答

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) 
} 
相关问题