如何初始化一个 Swift ViewController,它具有从前面的 ViewController 传递的非可选 属性?
How to initialize a Swift ViewController that has a non optional property passed from the preceding ViewController?
如何初始化一个 Swift ViewController,它具有从前面的 ViewController 传递的非可选 属性?
请假设:
所有 viewControllers 都在 mainStoryboard 中连接,并且在父级的 prepareForSegue 方法中将非可选 属性 设置为子级 ViewController。
class ParentVC{
override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "playlistsSegue" {
let vc = (segue.destination as! PlaylistsVC)
vc.set = attachedSet
vc.title = attachedSet?.name
}
}
}
集合属性 应该是非可选的,因为没有这个模型对象,ChildVC 就不能做它的事情。我将它与有问题的 属性 作为可选项一起使用,这导致了一个需要一些时间才能隔离的错误。通过强制将此 属性 设置为初始化的一部分,现在和将来都可以避免麻烦,因为 segue 模式一直出现。
class ChildVC{
var set:ModelObject
}
声明 var set: ModelObject!
将为您提供非可选 属性。让你自己设置 属性 。但是警告,如果你在设置它之前使用 属性 (这不太可能看到你在 prepareForSegue 中设置:你的程序会崩溃!所以像 @dan 建议的那样做一个断言将是一个安全的测试,以确保你在使用之前设置您的变量。
class ChildVC{
var set:ModelObject!
override func viewDidLoad() {
super.viewDidLoad()
assert(set != nil)
}
}
那你就可以只把你的代码在prepareForSegue:
里和ParentVC
里一样。
如何初始化一个 Swift ViewController,它具有从前面的 ViewController 传递的非可选 属性?
请假设:
所有 viewControllers 都在 mainStoryboard 中连接,并且在父级的 prepareForSegue 方法中将非可选 属性 设置为子级 ViewController。
class ParentVC{
override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "playlistsSegue" {
let vc = (segue.destination as! PlaylistsVC)
vc.set = attachedSet
vc.title = attachedSet?.name
}
}
}
集合属性 应该是非可选的,因为没有这个模型对象,ChildVC 就不能做它的事情。我将它与有问题的 属性 作为可选项一起使用,这导致了一个需要一些时间才能隔离的错误。通过强制将此 属性 设置为初始化的一部分,现在和将来都可以避免麻烦,因为 segue 模式一直出现。
class ChildVC{
var set:ModelObject
}
声明 var set: ModelObject!
将为您提供非可选 属性。让你自己设置 属性 。但是警告,如果你在设置它之前使用 属性 (这不太可能看到你在 prepareForSegue 中设置:你的程序会崩溃!所以像 @dan 建议的那样做一个断言将是一个安全的测试,以确保你在使用之前设置您的变量。
class ChildVC{
var set:ModelObject!
override func viewDidLoad() {
super.viewDidLoad()
assert(set != nil)
}
}
那你就可以只把你的代码在prepareForSegue:
里和ParentVC
里一样。