簡體   English   中英

Swift let屬性通過prepareForSegue設置

[英]Swift let property set through prepareForSegue

在Objective-C中,我可以輕松地將屬性添加到.h文件中...

@property (nonatomic, strong) Person *person;

然后在prepareForSegue:withIdentifier:期間設置此屬性。

在此示例中,視圖控制器的類是PersonViewController 它旨在顯示有關特定Person對象的信息。 它需要一個Person對象來顯示任何內容,並且Person對象不會改變。 要顯示需要並彈出並推送到PersonViewController的其他實例的PersonViewController

對我而言,這建議在Swift中對person屬性進行定義,如下所示:

let person: Person

除了不能。 如果以這種方式設置它,則必須在init方法結束之前對其進行初始化...但是無法執行此操作,因為它是由Storyboard實例化的。

所以我可以做...

var person: Person?

除了這是錯誤的。 沒有personPersonViewController將無法工作,因此將其PersonViewController可選是沒有意義的,將其設為var也沒有意義,因為person不會改變。

除此之外,我還必須添加...

guard let person = person else {return}

到需要使用person對象的每個函數。

我可以這樣

var person = Person()

但這感覺很麻煩而且很浪費。 每次創建視圖控制器時,我現在都會創建一個,然后扔掉一個Person 這也是一個在視圖控制器上下文中沒有意義的變量。

在等價的屬性中進行傳遞屬性的最佳方法是什么(該屬性不是可選的,不是var且不是在初始化期間創建的)?

我相信最好的方法是將其聲明為:

var person: Person!

如果您可以確保始終設置人員對象,則可以通過展開可選對象來節省時間。

恐怕您不能將其聲明為let,因為將在初始化類后設置此屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM