Необязательные значения Int32 в базовых данных требуют развертывания необязательных значений Int32 в коде - PullRequest
0 голосов
/ 28 мая 2019

В Базовых данных атрибуты типа String и Int32 имеют значение «Необязательно» (отмечены в свойствах).

enter image description here

Соответствуют этим значениям в коде, являются теми же типами, что и необязательные.

        var color1: String?
        var color2: String?
        var color3: String?
        var colorRangeLoc1: Int32?
        var colorRangeLoc2: Int32?
        var colorRangeLoc3: Int32?

Значения устанавливаются в некоторых случаях и передаются функции, как необязательные, для передачи в базовые данные.

func loadCellData(text: String, sortOrder: Int32, portion: Float, color1: String?, color2: String?, color3: String?, colorRangeLoc1: Int32?, colorRangeLoc2: Int32?, colorRangeLoc3: Int32?, colorRangeLen1: Int32?, colorRangeLen2: Int32?, colorRangeLen3: Int32?, underlineRangeLoc1: Int32?, underlineRangeLoc2: Int32?, underlineRangeLoc3: Int32?, underlineRangeLen1: Int32?, underlineRangeLen2: Int32?, underlineRangeLen3: Int32?)
{
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext

    let entry: CellData = NSEntityDescription.insertNewObject(forEntityName: "CellData", into: context) as! CellData

    entry.text = text
    entry.sortOrder = sortOrder
    entry.portion = portion
    entry.color1 = color1
    entry.color2 = color2
    entry.color3 = color3
    entry.colorRange1Loc = colorRangeLoc1
    entry.colorRange2Loc = colorRangeLoc2
    entry.colorRange3Loc = colorRangeLoc3
...

Xcode компилируетсябез ошибок для строки?значения, color1, color2 и color3, но показывает следующую ошибку для Int32?значения:

Value of optional type 'Int32?' must be unwrapped to a value of type 'Int32'

Это говорит о том, что необязательный Int32 в CoreData требует развернутого необязательного значения (в то время как необязательные строки в порядке)?Есть ли разница (это помогло бы мне понять, почему), и если да, то как с этим лучше всего справиться?

Назначение nil в качестве начального значения не работает.Принудительное развертывание вызывает сбой, если ноль (конечно).Нужно ли проверять все значения типа Int32?

if colorRangeLoc1 != nil { entry.colorRangeLoc1 = colorRangeLoc1 }

Или это должно быть 'guard' или 'if let'?

1 Ответ

0 голосов
/ 24 июля 2019

Необязательные значения в CoreData отличаются от значений в Swift. Согласно комментариям, по крайней мере для чисел, установите обязательное - невозможное значение - вместо nil, и отметьте это при использовании значения.

...