2016-08-17 6 views
0

2つのモデルの識別子を比較する汎用funcを作成しようとしていますが、同等の識別子がない場合はnilを返します。ここに関数があります。汎用パラメータ "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

を:?

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 } 

のようにそれを使用してください – Hamish

+0

これは構造モデルです。 –

+1

[mcve]を投稿してください。あなたが 'compareModel'と呼んでいるものを見ることなく、問題が何であるか言うのは難しいです。 – Hamish

答えて

0

Checkout構造体がObjectIdentifierプロトコルを実装していないためです。

のように見えるはずです、あなたのFUNCオーバーstruct Checkout: ObjectIdentifier { ... }

もっとようにモデルの構造体を定義していることを確認してください:checkout` `のタイプは何ですか

let currentJoborders: [Checkout] = [...] 
let checkout: Checkout = ... 

if let object: (index: Int, model: Checkout) = compareModel(checkout, models: currentJoborders) { 
    print(object) 
} 
関連する問題