Swift 5.3, как безопасно присвоить значение типа Int? набрать Int16? - PullRequest
0 голосов
/ 11 июля 2020

Возникли проблемы с импортом некоторых JSON в CoreData с использованием Swift 5.3

Вот сокращенная структура:

struct MyStruct: Decodable {
    let code: Int?
}

Свойство класса CoreData:

# MyClass
@NSManaged public var code: Int16
let newItem = MyClass(context: moc)
newItem.code = structItem.code 
// cannot assign value of type 'Int?' to type 'Int16'

или

if structItem.code != nil {
  newItem.code = structItem.code as! Int16
  // Cast from 'Int?' to unrelated type 'Int16' always fails
}

Я ищу безопасный способ импорта таких элементов, как Int16, источник данных JSON не находится под моим прямым контролем и может измениться.

Заявление об ограничении ответственности: я новичок в Swift, откладывал переход с Objective- C, но теперь мне кажется, что сейчас самое подходящее время.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 11 июля 2020

Попробуйте следующее:

newItem.code = Int16(structItem.code)

Вместо:

newItem.code = structItem.code as! Int16
1 голос
/ 11 июля 2020

Простое решение - декодировать значение как Int16

struct MyStruct: Decodable {
    let code: Int16?
}

...

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