相关疑难解决方法(0)

使用Swift 4中的JSONDecoder,缺少的键可以使用默认值而不必是可选属性吗?

Swift 4添加了新Codable协议.当我使用JSONDecoder它似乎要求我的Codable类的所有非可选属性在JSON中有键或它会引发错误.

使我的类的每个属性都是可选的似乎是一个不必要的麻烦,因为我真正想要的是使用json中的值或默认值.(我不希望这个属性为零.)

有没有办法做到这一点?

class MyCodable: Codable {
    var name: String = "Default Appleseed"
}

func load(input: String) {
    do {
        if let data = input.data(using: .utf8) {
            let result = try JSONDecoder().decode(MyCodable.self, from: data)
            print("name: \(result.name)")
        }
    } catch  {
        print("error: \(error)")
        // `Error message: "Key not found when expecting non-optional type
        // String for coding key \"name\""`
    }
}

let goodInput = "{\"name\": \"Jonny Appleseed\" }"
let badInput = "{}"
load(input: goodInput) …
Run Code Online (Sandbox Code Playgroud)

json swift swift4 codable

88
推荐指数
5
解决办法
3万
查看次数

我什么时候应该使用选项?何时应该使用具有默认值的非选项?

我知道Swift中推荐的方法是使用:

class Address {
var firstLine : String?
var secondLine : String?
}
Run Code Online (Sandbox Code Playgroud)

但有时我看到其他开发人员以这种方式编写代码:

class Address {
var firstLine : String = ""
var secondLine : String = ""
}
Run Code Online (Sandbox Code Playgroud)

这是一种nil不受推荐的方式,因为无论什么时候你都会崩溃而且没有任何出口让你恢复.是对的吗?或者有一些使用非默认选项的用例可能很好.如果是那么那么?

我看到了另一个问题,问题是效率而不是更适合你的需求.我正在寻找答案,其中说"这是一个使用非选项的好地方,这是一个使用期权的好地方".有时我看到人们到处都是倾销选项,这让我觉得我们不需要非选项吗?有时候我会看到人们试图尽可能地避免选项,并且只是以Objective-C风格编写代码.

上述问题的答案并不代表非选择性良好的有效案例.这是无声的.至于选择选项:我猜测通过网络电话填充的模型,选项是正确的选择,因为你不知道它是否是nil.

optional code-structure swift

5
推荐指数
1
解决办法
1025
查看次数

在 swift 中使用“默认值”创建非可选 Codable 的最佳方法

我知道classand的基本概念,struct但是为 API 创建模型以获取数据并告诉我优缺点更有效。

以前我不使用可选的模型。相反,我给了它一些价值。IE

class CompanyInfo : Codable {
    var NameEn : String = ""
    var CityEn : String = ""
    var Website : String = ""
    var Email : String = ""
    var Phone : String = ""
    var Fax : String = ""
}
Run Code Online (Sandbox Code Playgroud)

但是当它null从 API获得一些价值时。即"Fax": null然后应用程序崩溃,因为它无法使用以下行解析数据

let data = try JSONDecoder().decode(dataModel.self, from: dataSet)
Run Code Online (Sandbox Code Playgroud)

定义模型的最佳方法是什么,这样我就不需要解开可选项或给它默认值。

xcode ios swift codable decodable

2
推荐指数
1
解决办法
890
查看次数

标签 统计

swift ×3

codable ×2

code-structure ×1

decodable ×1

ios ×1

json ×1

optional ×1

swift4 ×1

xcode ×1