Ios Swift 5.3,如何安全分配类型为'的值;Int?&x27;输入';Int16';?

Ios Swift 5.3,如何安全分配类型为'的值;Int?&x27;输入';Int16';?,ios,swift,core-data,Ios,Swift,Core Data,使用Swift 5.3将一些JSON导入CoreData时出现问题 以下是简化结构: struct MyStruct: Decodable { let code: Int? } CoreData类属性: # MyClass @NSManaged public var code: Int16 或 我所寻找的是一种安全的方法,可以将这些项目导入Int16,JSON数据源不在我的直接控制之下,可能会发生变化 免责声明:我是Swift的新手,一直在推迟从Objective-C的迁移,但现在似

使用Swift 5.3将一些JSON导入CoreData时出现问题

以下是简化结构:

struct MyStruct: Decodable {
    let code: Int?
}
CoreData类属性:

# MyClass
@NSManaged public var code: Int16

我所寻找的是一种安全的方法,可以将这些项目导入Int16,JSON数据源不在我的直接控制之下,可能会发生变化

免责声明:我是Swift的新手,一直在推迟从Objective-C的迁移,但现在似乎和任何时候一样好

提前谢谢

试试这个:

newItem.code = Int16(structItem.code)
而不是:

newItem.code = structItem.code as! Int16

一个简单的解决方案是将值解码为
Int16

struct MyStruct: Decodable {
    let code: Int16?
}

...

let newItem = MyClass(context: moc)
newItem.code = structItem.code ?? 0

我正要在这里回答自己:)``如果newItem.code!=nil{newItem.code=Int16(structItem.code!)//我得到一个错误,它必须被打开,我认为现在这样做是安全的。}``害怕使用强制强制转换,最好编写guard let code=newItem.code,否则{return}code=Int16(structItem.code)我会适当地害怕。guard和return并不是一个真正的选项,我在相当多的结构中循环使用大约20个属性。如果structItem.code!=nil{newItem.code=Int16(structItem.code??0)//感觉更好newItem.code=Int16(structItem.code!)//!必需,因为我仍然收到错误}
newItem.code = structItem.code as! Int16
struct MyStruct: Decodable {
    let code: Int16?
}

...

let newItem = MyClass(context: moc)
newItem.code = structItem.code ?? 0