将字符串传递给第二个视图控制器
Pass a string to a second view controller
我正在尝试将字符串传递给第二个视图控制器。该字符串是新视图控制器的标题。
要传递字符串,我可以使用 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"
他们是一样的。
如果有区别,就是解包可选值的时候了。在第一个解决方案中,svc
的类型是 timeSetting
。在第二种方案中,svc
的类型是timeSetting?
.
您的两个代码都可以正常工作,而且工作方式相同。
唯一的区别在于可选的转换。
两种解决方案将执行相同的操作。在我看来,第一种解决方案是首选,因为它更准确地表达了您的意图。
通过声明 let svc = segue.destinationViewController as! timesetting
,您声明目标视图控制器肯定是 timesetting
类型。
第二种形式测试目标视图控制器是否为timeSetting
类型。如果是,则变量 svc
将具有 non-nil 值。
如果您要定义另一个呈现不同类型视图控制器的同名 segue,那么这两种解决方案都将失败; as!
子句上的第一个和当您尝试展开 svc!
时的第二个,这将是零。
两者都可以,但我认为最好的方法是像下面这样打开可选的:
if let svc = segue.destinationViewController as? timeSerting { svc.toPass = "xx" }
我正在尝试将字符串传递给第二个视图控制器。该字符串是新视图控制器的标题。 要传递字符串,我可以使用 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"
他们是一样的。
如果有区别,就是解包可选值的时候了。在第一个解决方案中,svc
的类型是 timeSetting
。在第二种方案中,svc
的类型是timeSetting?
.
您的两个代码都可以正常工作,而且工作方式相同。
唯一的区别在于可选的转换。
两种解决方案将执行相同的操作。在我看来,第一种解决方案是首选,因为它更准确地表达了您的意图。
通过声明 let svc = segue.destinationViewController as! timesetting
,您声明目标视图控制器肯定是 timesetting
类型。
第二种形式测试目标视图控制器是否为timeSetting
类型。如果是,则变量 svc
将具有 non-nil 值。
如果您要定义另一个呈现不同类型视图控制器的同名 segue,那么这两种解决方案都将失败; as!
子句上的第一个和当您尝试展开 svc!
时的第二个,这将是零。
两者都可以,但我认为最好的方法是像下面这样打开可选的:
if let svc = segue.destinationViewController as? timeSerting { svc.toPass = "xx" }