【发布时间】:2018-11-07 01:17:26
【问题描述】:
我的模型如下。
struc Info: Decodable {
var firstName: String?
var lastName: String?
}
在表格视图单元格中显示时,我正在做的事情如下。
personName.text = "\(personArray[indexPath.row].firstName!) \(personArray[indexPath.row].lastName!)"
如果我有以下格式的数据,现在应用程序会崩溃
[
{
"firstName" : "F 1",
"lastName" : "L 1"
},
{
"firstName" : "F 2"
},
{
"lastName" : "L 3"
}
]
应用程序崩溃说 lastName 是 nil
解决方案 1
此检查的解决方案为 nil 然后显示名称,但是我不想在运行时进行检查,因为 我必须检查所有变量(考虑到我有25 个变量)。以下是我可以做的。
var firstName = ""
if (personArray[indexPath.row].firstName == nil) {
firstName = ""
} else {
firstName = personArray[indexPath.row].firstName!
}
var lastName = ""
if (personArray[indexPath.row].lastName == nil) {
lastName = ""
} else {
lastName = personArray[indexPath.row].lastName!
}
personName.text = "\(firstName) \(lastName)"
解决方案 2
我可以在模型本身中进行更新,如下所示。
struc Info: Decodable {
var firstName: String?
var lastName: String?
var firstName2 : String? {
get {
if (self.firstName==nil) {
return ""
}
return firstName
}
var lastName2 : String? {
get {
if (self.lastName==nil) {
return ""
}
return lastName
}
}
personName.text = "\(personArray[indexPath.row].firstName2!) \(personArray[indexPath.row].lastName2!)"
但是我也有这个问题。这样,我必须再次创建 N 个变量。
如果网络服务中缺少该变量,是否还有其他替代方法可以分配默认值?
【问题讨论】:
-
编写自定义初始化器并使用
decodeIfPresent -
@vadian : 示例链接或示例答案会很棒...
-
@vadian :谢谢你的链接...明天早上会调查...
标签: null swift4 jsondecoder