Watchkit - 如何使用contextForSegueWithIdentifier传递多个值

时间:2016-03-21 00:34:52

标签: swift segue watchkit watch-os-2

我目前使用WKInterfaceController将字符串值从一个contextForSegueWithIdentifier传递到另一个{1}},如下所示:

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
}

然后在目的地WKInterfaceController上执行以下操作:

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

但是我想传递多个值,使用两个名为string2string3的字符串值的附加属性。

如何将其他字符串值传递给WKInterfaceController

1 个答案:

答案 0 :(得分:1)

Swift有三种集合类型:ArrayDictionarySet

将上下文作为字符串数组传递:

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

将上下文作为字典传递:

    ...
    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"])
    }
}

就个人而言,我更喜欢使用字典,因为如果调用者改变了字符串的顺序或数量,则数组方法会更脆弱。

无论哪种方式,都要添加必要的检查以使代码健壮。