在 Swift 中实例化新 Codable 对象的最简单方法是什么?

ike*_*8me 9 swift codable

我有一个 Codable 类:

class Task: Codable {
    var name: String
}
Run Code Online (Sandbox Code Playgroud)

当我尝试实例化它时:

let newTask = Task()
allTasks.append(newTask)
Run Code Online (Sandbox Code Playgroud)

它给了我错误:

调用中缺少参数“from”的参数

我想要的只是将一个新对象(newTask)插入到一个数组中。什么是最简单的方法来做到这一点?

Jes*_*ock 8

你可以从 NSObject 继承初始化器:

class Task: NSObject, Codable {
    var name: String = ""
}

let newTask = Task()
Run Code Online (Sandbox Code Playgroud)

如果您不想继承 NSObject,那么只需创建您自己的初始化程序:

class Task: Codable {
    var name: String?

    init() {

    }
}
Run Code Online (Sandbox Code Playgroud)

如果您不想使name可选(或将其设置为默认值),则必须在 init() 中对其进行初始化,例如:

class Task: Codable {
    var name: String

    init(withName name: String) {
        self.name = name
    }
}
let newTask = Task(withName: "ikevin8me")
Run Code Online (Sandbox Code Playgroud)


rma*_*ddy 2

您的Task类不提供自己的初始化程序,因此它获取Codable协议中定义的初始化程序(它从Decodable协议中获取)。

要么添加您自己的init带有name参数的显式,要么将您的类更改为结构体。无论哪种方式,您都需要Task通过传入名称值来创建一个属性,以便name可以初始化该属性。

这些都没有解决您发布的代码没有使用的事实Codable,因此也许您的类(或结构)不需要符合Codable.