我试图将字符串传递给第二个视图控制器。该字符串是新视图控制器的标题。 为了传递字符串,我可以使用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"
答案 0 :(得分:2)
答案 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" }