我正在尝试将我的项目转换为Swift 3.0,但是在使用NSNumber
和Integers
时,我收到了两条错误消息。
无法将类型int赋给类型NSNumber
为
//item is a NSManaged object with a property called index of type NSNumber
var currentIndex = 0
for item in self.selectedObject.arrayOfItems {
item.index = currentIndex
currentIndex += 1
}
即使我将currentIndex
更改为NSNumber
类型,我也会得到以下错误
二元运算符“+=”不能应用于类型“NSNumber”和“Int”
因此,我创建了一个名为one
的NSNumber
类型的属性来添加到currentIndex
中,但随后得到了以下错误;
二元运算符“+=”不能应用于两个NSNumber操作数
我得到的第二个错误是
否'+‘候选项生成预期的上下文结果类型NSNumber
let num: Int = 210
let num2: Int = item.points.intValue
item.points = num + num2
这里我只是尝试在points属性值上加210,item
是一个NSManagedObject
。
因此,基本上我在考虑将数字添加到NSNumber
类型的属性时遇到了问题。我之所以使用NSNumber
,是因为它们是NSManagedObject
的属性。
有人能帮我吗?我有超过80个错误,它们都是上面提到的错误之一。
谢谢
发布于 2016-09-05 05:12:50
在Swift 3之前,许多类型在必要的地方自动“桥接”到某个NSObject
子类的实例,比如String
到NSString
,或者Int
,Float
,...敬NSNumber
。
从Swift 3开始,您必须明确该转换:
var currentIndex = 0
for item in self.selectedFolder.arrayOfTasks {
item.index = currentIndex as NSNumber // <--
currentIndex += 1
}
或者,在创建NSManagedObject
子类时使用“将标量属性用于原始数据类型”选项,然后该属性将具有某种整数类型,而不是NSNumber
,这样您就可以在不进行转换的情况下获取和设置它。
发布于 2017-10-22 17:53:57
在Swift 4中(在Swift 3中可能也是如此),NSNumber(integer: Int)
被替换为NSNumber(value: )
,其中value
可以是几乎任何类型的数字:
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)
发布于 2017-11-22 19:04:06
Swift 4
var currentIndex:Int = 0
for item in self.selectedFolder.arrayOfTasks {
item.index = NSNumber(value: currentIndex) // <--
currentIndex += 1
}
https://stackoverflow.com/questions/39321421
复制相似问题