EBD*_*KUM 37 xcode swift codable swift4.1 xcode9.3
更新到Xcode 9.3(使用Swift 4.1)后,发现以下问题:
创建一个空项目,向其添加一个新的.swift文件并创建两个新类:
class CodableOne: Codable {
let some: String
}
class CodableTwo: Codable {
var some: String
}
Run Code Online (Sandbox Code Playgroud)
建立成功
添加CodableOne类型的新常量CodableTwo:
class CodableOne: Codable {
let some: String
let another: CodableTwo
}
class CodableTwo: Codable {
var some: String
}
Run Code Online (Sandbox Code Playgroud)
建立成功
现在将类移动CodableTwo到另一个文件(例如ViewController.swift)
构建失败.
现在有一个错误,它不会消失.Codable类不应该需要初始化器(如前面的步骤所示).
关于这背后可能出现的问题及如何解决的任何想法将不胜感激!
PS Code在Xcode 9.2中不存在.也不清理项目/构建路径,重新安装Xcode 9.3也有帮助.
Osc*_*and 21
这是Swift 4.1编译器中的一个错误.要解决它,无论是做the4kman的回答中列出的步骤,或者简单地改变let到var你的声明,因为这样的:
class C1 : Decodable {
let str: String
// error: Class 'C1' has no initializers - if class C's `c1` is a let constant.
}
class C : Decodable {
var c1: C1 // << Change to `var`, compilation succeeds.
}
Run Code Online (Sandbox Code Playgroud)
由Apples Swift工程师提供的解决方法.
如果这个和4kmans的答案都没有帮助,你可以在init不编译的模型中添加另一个.如果您的类有大量的变量,只需崩溃init以满足编译器.在Codable初始化仍然会被合成.
class C1: Decodable {
let str: String
@available(*, deprecated, message: "Do not use.")
private init() {
fatalError("Swift 4.1")
}
}
Run Code Online (Sandbox Code Playgroud)