为WatchKit准备“segue”

时间:2017-08-01 08:43:22

标签: ios swift swift3 segue watchkit

我正在尝试将字符串从一个视图控制器传输到另一个视图控制器。我遇到的问题是需要将字符串'设置为任何对象'。

我在下面的代码在控制台中返回一个nil。有没有办法将数据作为字符串发送到VC?提前谢谢。

在MainVc中 -

func contextForSegueWithIdentifier(segueIdentifier: String) -> AnyObject? {
    // You may want to set the context's identifier in Interface Builder and check it here to make sure you're returning data at the proper times

    // Return data to be accessed in ResultsController
    var currentValue = "Hellooo"
    return currentValue as String as AnyObject
}

收到VC。

override func awake(withContext context: Any?) {
    super.awake(withContext: context)
    if let val: Any = context as? Any {
        print(val)
    } else {
        print("An error occurred")
    }        // Configure interface objects here.
}

输出只是零。

2 个答案:

答案 0 :(得分:1)

首先currentValue as String无效,currentValue已经是String

其次,将val再次投射到Any毫无意义,因为val已经是非显式类型Any。您应该将其条件转换为String,因为您期望String变量。

对于这么简单的情况,我不会使用' contextForSegueWithIdentifier'我只想使用presentController(withName:context:)pushController(withName:context:)

使用这些你不需要进行任何演员,你只需presentController(withName: "MyContoller", context: "Hello")

答案 1 :(得分:0)

我遇到了同样的问题。解决方案就像Larme建议的那样,使用了适当的swift 3或4函数,在这种情况下,我假设您尝试使用此代码

覆盖func contextForSegueWithIdentifier(segueIdentifier:String) - > AnyObject? {

但编译器建议不必重写,因为Method不会覆盖其超类中的任何方法

简单的解决方案是删除覆盖。应用程序编译,但从不调度contextForSegue函数。

正确的结构如下:

覆盖func contextForSegue(withIdentifier segueIdentifier:String) - >任何?     {