2016-08-17 2 views
0

Ich versuche, ein generisches func zu erstellen, das den Identifikator von zwei Modellen vergleicht und nil zurückgibt, wenn es keinen gleichen Bezeichner gibt. Hier ist die Funktion.Generic Parameter "T" konnte nicht abgeleitet werden

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

Ich greife es wie folgt aus:

let object: (index: Int?, model: Checkout?) = self.compareModel(checkout, models: currentJoborders) 

Aber ich bekomme diese Fehlermeldung vom Compiler.

Generischer Parameter "T" konnte nicht abgeleitet werden.

+1

Was die Art der 'checkout' ist? – Hamish

+0

Es ist ein Strukturmodell. –

+1

Könnten Sie bitte ein [mcve] posten? Ohne zu sehen, was Sie versuchen, 'compareModel' zu nennen, ist es schwierig zu sagen, was das Problem ist. – Hamish

Antwort

0

Es ist, weil Ihre Checkout Struktur ObjectIdentifier Protokoll nicht implementiert hat.

Stellen Sie sicher, definieren Sie Ihre Modell-Struktur als struct Checkout: ObjectIdentifier { ... }

Mehr über Ihre func sollte wie folgt aussieht:

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 
} 

Verwenden Sie es als:

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

if let object: (index: Int, model: Checkout) = compareModel(checkout, models: currentJoborders) { 
    print(object) 
} 
Verwandte Themen