2016-08-17 100 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) 
} 
相關問題