将字符串传递给第二个视图控制器

时间:2016-01-16 18:08:28

标签: ios swift uistoryboardsegue

我试图将字符串传递给第二个视图控制器。该字符串是新视图控制器的标题。 为了传递字符串,我可以使用2个解决方案,两种解决方案都能正常工作,但对我来说不同的是差别不大。有人可以解释我的差异吗?

这是第一个解决方案:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        if (segue.identifier == "settime") {
            let svc = segue.destinationViewController as! timeSetting;
            //Assign the new title
            svc.toPass = "New Title"

        }
    }

这是第二个解决方案:

   override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        if (segue.identifier == "settime") {
            let svc = segue.destinationViewController as? timeSetting;
            //Assign the new title
            svc!.toPass = "New Title"

        }
    }

变量toPass在第二个viewController中以这种方式定义:

 var toPass:String = "Title"

4 个答案:

答案 0 :(得分:2)

您的两个代码都正常工作,它的工作方式相同。

唯一的区别在于可选的铸造。

Optional in Swift

答案 1 :(得分:1)

他们是一样的。

如果存在差异,则是解开可选值的时间。在第一个解决方案中,svc的类型为timeSetting。在第二个解决方案中,svc的类型为timeSetting?

答案 2 :(得分:1)

两种解决方案都将执行相同的操作。在我看来,第一种解决方案是首选,因为它更准确地表达了您的意图。

通过声明 this.control({ '[itemId=some_id]':{ itemclick: this.doSomething }, ... ,您声明目标视图控制器肯定属于let svc = segue.destinationViewController as! timesetting类型。

第二种形式测试目标视图控制器是否属于timesetting类型。如果是,那么变量timeSetting将具有非零值。

如果要定义另一个同名的segue来呈现不同类型的视图控制器,那么两个解决方案都将失败; svc子句中的第一个,以及当您尝试解包as!时的第二个,这将是零。

答案 3 :(得分:1)

两者都可以,但在我看来,最好的方法是打开可选项,如下所示:

if let svc = segue.destinationViewController as? timeSerting { svc.toPass = "xx" }