2017-06-12 75 views
0

在Swift中設計類/結構時,什麼是確定何時應該使用可選類型的最佳實踐?什麼時候在Swift中使用可選類型的原則?

例如,假設我將JSON響應映射到Photo對象,並且有一個屬性photographerName,它只是一個字符串。有時我們收到響應的字段photographerName的空字符串。

我的Photo對象是否使用String?類型並將其分配給nil?或者使用String類型並將其設置爲空字符串?

回答

1

這取決於你喜歡什麼,但如果你收到一個屬性可能是nil的迴應,那麼你應該使用optional並在代碼中處理它。

事情是這樣的:

struct Photo { 
    let photographerName: String? 

    init(photographerName: String? = nil) { 
     self.photographerName = photographerName 
    } 
} 

然後在你的代碼,以檢查是否photographerName有一個值:

if let photographerName = photo.photographerName { 
    // use photographerName in here 
} 
+2

你只需要一個init,如果你使用nil作爲默認'init(photographerName:String?= nil)' – vikingosegundo

1

這真的取決於您要使用的應用程序體系結構和數據結構在應用程序中。

沒有規則會描述如何在應用程序體系結構中正確使用可選鏈接。

起初,我們應該知道什麼是optional chaining

可選鏈是一個查詢和調用屬性,方法和可能目前爲零的可選下標的過程。如果 可選包含值,則屬性,方法或下標調用 成功;如果可選爲零,則屬性,方法或下標 調用返回nil。多個查詢可以鏈接在一起,並且如果鏈中的任何鏈接爲零,則整個鏈將優雅地失敗。

根據我的經驗,當我明確無法定義我的模型是否可以具有某種關係或屬性時,我在數據結構中使用了可選值。

例子:

struct User { 
    let name: String 
    let email: String 
    var friends: [String]? 

    init(name: String, email: String) { 
     self.name = name 
     self.email = email 
    } 
} 

let user = User(name: "Oleg", email: "[email protected]") 

我知道,用戶將有姓名和電子郵件,但我不知道他是否有任何朋友。另外,通過這種方式,我可以防止我的代碼在nil對象上執行操作。

如果您描述它真的取決於應用程序的體系結構和要求。例如,如果photographerName是空的,我們是否應該顯示佔位符?是否有使用photographerName屬性的其他操作?

相關問題