Working with NSNumber & Integer values in Swift 3
Before Swift 3, many types were automatically "bridged" to an instance of some NSObject
subclass where necessary, such as String
toNSString
, or Int
, Float
, ... to NSNumber
.
As of Swift 3 you have to make that conversion explicit:
var currentIndex = 0for item in self.selectedFolder.arrayOfTasks { item.index = currentIndex as NSNumber // <-- currentIndex += 1}
Alternatively, use the option "Use scalar properties for primitive data types" when creating the NSManagedObject
subclass,then the property has some integer type instead of NSNumber
,so that you can get and set it without conversion.
In Swift 4 (and it might be the same in Swift 3) NSNumber(integer: Int)
was replaced with NSNumber(value: )
where value
can be any almost any type of number:
public init(value: Int8)public init(value: UInt8)public init(value: Int16)public init(value: UInt16)public init(value: Int32)public init(value: UInt32)public init(value: Int64)public init(value: UInt64)public init(value: Float)public init(value: Double)public init(value: Bool)@available(iOS 2.0, *)public init(value: Int)@available(iOS 2.0, *)public init(value: UInt)