首页 文章

Swift让属性通过prepareForSegue设置

提问于
浏览
2

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

@property (nonatomic, strong) Person *person;

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

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

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

let person: Person

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

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

var person: Person?

除了这是错误的 . PersonViewController 在没有 person 的情况下无法正常工作,因此选择它是没有意义的,因为 person 不会改变,所以它也没有意义 .

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

guard let person = person else {return}

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

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

var person = Person()

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

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

1 回答

  • 5

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

    var person: Person!
    

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

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

相关问题