【问题标题】:Cannot invoke 'init' with argument of type 'NSNumber' (Swift)无法使用“NSNumber”类型的参数调用“init”(Swift)
【发布时间】:2015-06-06 09:41:11
【问题描述】:

我正在尝试使用“权重”数组来填充带有以下获取请求的图表。但我收到错误“无法使用 '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
    }

【问题讨论】:

  • 为什么要将水平索引截断为 Int16,为什么要将权重值转换为 NSNumber? CGFloat 初始化程序不能采用 NSNumber,它应该采用基本数字类型。
  • @MattBridges:实际上 CGFloat 可以用 NSNumber 初始化。但这里没有必要。

标签: ios arrays swift int xcode6


【解决方案1】:

一行有两个问题

return CGFloat(weights[Int16(horizontalIndex)] as NSNumber)
  • weights[Int16(horizontalIndex)] 无法编译,因为 Int16 不能是数组下标。应该是weights[Int(horizontalIndex)]
  • weights[...] as NSNumber 无法编译,因为 fixed-size 整数类型和 NSNumber 之间没有自动桥接, 应该是NSNumber(short: weights[...])

所以这将编译和工作:

return CGFloat(NSNumber(short: weights[Int(horizontalIndex)]))

但是中间不需要使用NSNumber,可以 简化为

return CGFloat(weights[Int(horizontalIndex)])

【讨论】:

  • 谢谢!我是新手,所以这些东西对我来说才刚刚开始有意义。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多