Working with NSNumber & Integer values in Swift 3 Working with NSNumber & Integer values in Swift 3 ios ios

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)


Swift 4:

var currentIndex:Int = 0for item in self.selectedFolder.arrayOfTasks {   item.index = NSNumber(value: currentIndex) // <--   currentIndex += 1}