Swift让属性通过prepareForSegue设置

Fog*_*ter 2 properties optional ios segue swift

在Objective-C中,我可以非常轻松地将属性添加到.h文件中......

@property (nonatomic, strong) Person *person;
Run Code Online (Sandbox Code Playgroud)

然后在此期间设置此属性prepareForSegue:withIdentifier:.

在此示例中,视图控制器的类是PersonViewController.它旨在显示有关特定Person对象的信息.它需要一个Person对象来显示任何东西,Person对象不会改变.显示需要并弹出并推送到其他实例的其他人PersonViewController.

对我来说,这表明在Swift中person属性应该如此定义......

let person: Person
Run Code Online (Sandbox Code Playgroud)

除了它不可能.如果我这样设置它然后它必须在init方法结束之前初始化...但是没有办法这样做,因为它正在被实例化Storyboard.

所以我能做到这一点......

var person: Person?
Run Code Online (Sandbox Code Playgroud)

除了这是错误的.在PersonViewController没有将无法正常工作person,从而使其成为可选的没有意义,并使之成为var没有意义无论是作为person不会改变.

除此之外,我还要添加......

guard let person = person else {return}
Run Code Online (Sandbox Code Playgroud)

到我需要使用该person对象的每个函数.

我可以这样做......

var person = Person()
Run Code Online (Sandbox Code Playgroud)

但这会让人感到烦躁和浪费.每当我创建视图控制器时,我现在创建然后扔掉一个Person.它也是一个var,在视图控制器的上下文中没有意义.

在属性不是可选的segue期间执行传递属性的同等事物的最佳方法是什么var,是不是在init期间创建的?

Gre*_*reg 5

我认为最好的方法是将其声明为:

var person: Person!
Run Code Online (Sandbox Code Playgroud)

如果您确定将始终设置person对象,则可以节省您打开可选项的时间.

我担心你不能将它声明为let,因为在初始化类之后将设置此属性.