2016-03-21 7 views
-1

übergeben Sie einen String-Wert aus einer WKInterfaceController zu einem anderen mit contextForSegueWithIdentifier wie so passieren:Watchkit - Wie ich zur Zeit mehrere Werte mit contextForSegueWithIdentifier

override func contextForSegueWithIdentifier(segueIdentifier: String, inTable table: WKInterfaceTable, rowIndex: Int) -> AnyObject? { 

    if segueIdentifier == "segueDetails" { 
     return self.string1 
    } 

    // Return data to be accessed in ResultsController 
    return nil 
} 

Und dann auf dem Ziel WKInterfaceController ich folgendes:

override func awakeWithContext(context: AnyObject?) { 
    super.awakeWithContext(context) 

    if let val: String = context as? String { 
     self.label.setText(val) 
    } else { 
     self.label.setText("") 
    } 
    // Configure interface objects here. 
} 

Allerdings möchte ich mehrere Werte übergeben, mit zwei zusätzlichen Eigenschaften mit String-Werten string2 und string3.

Wie kann ich zusätzliche Zeichenfolgenwerte an die WKInterfaceController übergeben?

Antwort

1

Swift hat drei Sammlungsarten: Array, Dictionary und Set.

Vorbei an den Kontext als ein Array von Strings:

... 
    if segueIdentifier == "segueDetails" { 
     return [string1, string2, string3] 
    } 

func awakeWithContext(context: AnyObject?) { 
    super.awakeWithContext(context) 

    // Configure interface objects here. 
    if let strings = context as? [String] { 
     foo.setText(strings[0]) 
     bar.setText(strings[1]) 
     baz.setText(strings[2]) 
    } 
} 

den Kontext als Wörterbuch Passing:

... 
    if segueIdentifier == "segueDetails" { 
     return ["foo" : string1, "bar" : string2, "baz" : string3] 
    } 

func awakeWithContext(context: AnyObject?) { 
    super.awakeWithContext(context) 

    // Configure interface objects here. 
    if let strings = context as? [String: String] { 
     foo.setText(strings["foo"]) 
     bar.setText(strings["bar"]) 
     baz.setText(strings["baz"]) 
    } 
} 

Persönlich bevorzuge ich ein Wörterbuch verwenden, wie der Array Ansatz wäre etwas fragiler, wenn der Aufrufer jemals die Reihenfolge oder die Anzahl der Strings geändert hätte.

So oder so fügen Sie die notwendigen Prüfungen hinzu, um Ihren Code robust zu machen.