无法使用 'NSNumber' 类型的参数调用 'init' (Swift)
Cannot invoke 'init' with argument of type 'NSNumber' (Swift)
我正在尝试使用 'weights' 数组通过以下获取请求填充图表。但是我收到错误消息“无法使用 'NSNumber' 类型的参数调用 'init',我不知道为什么。'weights' 数组应该是 UInt16 数组。
var weights : [Int16] = []
func weightFetchRequest() -> NSFetchRequest {
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let managedContext = appDelegate.managedObjectContext!
let fetchRequest = NSFetchRequest(entityName: "Assessment")
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "nsDateOfAssessment", ascending: true)]
var error: NSError?
let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as [Assessment]?
if let assessments = fetchedResults {
let weightss = assessments.map { assessment in assessment.weight }
weights = weightss
println(weights)
println(weightss)
}
return fetchRequest
}
func lineChartView(lineChartView: JBLineChartView!, verticalValueForHorizontalIndex horizontalIndex: UInt, atLineIndex lineIndex: UInt) -> CGFloat {
if (lineIndex == 0) {
return CGFloat(weights[Int16(horizontalIndex)] as NSNumber) //Error here
}
return 0
}
行中有两个问题
return CGFloat(weights[Int16(horizontalIndex)] as NSNumber)
weights[Int16(horizontalIndex)]
无法编译,因为 Int16
不能是数组下标。应该是 weights[Int(horizontalIndex)]
.
weights[...] as NSNumber
无法编译,因为 固定大小 整数类型和 NSNumber
之间没有自动桥接,
应该是 NSNumber(short: weights[...])
.
所以这将编译并工作:
return CGFloat(NSNumber(short: weights[Int(horizontalIndex)]))
不过中间没必要用NSNumber
,可以
简化为
return CGFloat(weights[Int(horizontalIndex)])
我正在尝试使用 'weights' 数组通过以下获取请求填充图表。但是我收到错误消息“无法使用 'NSNumber' 类型的参数调用 'init',我不知道为什么。'weights' 数组应该是 UInt16 数组。
var weights : [Int16] = []
func weightFetchRequest() -> NSFetchRequest {
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let managedContext = appDelegate.managedObjectContext!
let fetchRequest = NSFetchRequest(entityName: "Assessment")
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "nsDateOfAssessment", ascending: true)]
var error: NSError?
let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as [Assessment]?
if let assessments = fetchedResults {
let weightss = assessments.map { assessment in assessment.weight }
weights = weightss
println(weights)
println(weightss)
}
return fetchRequest
}
func lineChartView(lineChartView: JBLineChartView!, verticalValueForHorizontalIndex horizontalIndex: UInt, atLineIndex lineIndex: UInt) -> CGFloat {
if (lineIndex == 0) {
return CGFloat(weights[Int16(horizontalIndex)] as NSNumber) //Error here
}
return 0
}
行中有两个问题
return CGFloat(weights[Int16(horizontalIndex)] as NSNumber)
weights[Int16(horizontalIndex)]
无法编译,因为Int16
不能是数组下标。应该是weights[Int(horizontalIndex)]
.weights[...] as NSNumber
无法编译,因为 固定大小 整数类型和NSNumber
之间没有自动桥接, 应该是NSNumber(short: weights[...])
.
所以这将编译并工作:
return CGFloat(NSNumber(short: weights[Int(horizontalIndex)]))
不过中间没必要用NSNumber
,可以
简化为
return CGFloat(weights[Int(horizontalIndex)])