Reputation: 928
I am having trouble with a core data entity and SwiftUI. In my view, some properties are non-optional when they should be and I do not understand why.
Here is my Entry core data entity:
Here is how I am attempting to use this in a view:
if entry.text != nil {
Text(entry.text!)
}
if entry.number != nil {
Text("\(entry.number, specifier: "%.0f")")
}
if entry.boolean != nil {
Text(entry.boolean ? "True" : "False")
}
My issue is that for entry.number
and entry.boolean
, swift complains of Comparing non-optional value of type 'Double' to 'nil' always returns true
.
This does not happen for entry.text
. I have checked the values by running print(entry)
and number
and boolean
are nil
in the persistent store.
I understand that core data optionals and swift optionals are different. However, shouldn't all Entry properties be optional in this case? Why is SwiftUI complaining that they are not?
Upvotes: 1
Views: 1420
Reputation: 51993
When you create your entity the default setting for Boolean and Double is to use scalar (primitive) types and they are non-optional because Objective-C (which is what Core Data is based on) can't handle optional scalar types.
This is how they are defined in code
@NSManaged public var boolean: Bool
@NSManaged public var number: Double
If you uncheck to use scalar type (Inspector Cmd-alt-0) then the underlying type would be NSNumber instead and they would be optional
@NSManaged public var number: NSNumber?
@NSManaged public var boolean: NSNumber?
Upvotes: 3