错误:通用参数' R.Generator.Element'不能绑定到非@objc协议类型' AnyObject'

时间:2014-12-28 19:24:40

标签: ios

我正在查询HealthKit并将其保存到CoreData。我在一个单独的类中获取数据。在TableViewController中,我将数据附加到数组:

if NSUserDefaults.standardUserDefaults().boolForKey("weightSwitch") == true {
    xAxisDatesArray.append(cdFetchWeight.queryCoreDataDate())
    yAxisValuesArray.append(cdFetchWeight.queryCoreDataData())

并将其传递给tableView.dequeueReusableCellWithIdentifier

myCell.xAxisDates = xAxisDatesArray[indexPath.row]
myCell.yAxisValues = yAxisValuesArray[indexPath.row]

在UITableViewCell中,我初始化变量(yAxisValues,xAxisDates)并将它们传递给一个图表库,该图表获取x和y值并绘制图表。

class TableViewCell: UITableViewCell, TKChartDelegate {

    var xAxisDates = []
    var yAxisValues = []

    plot....

我需要获取yAxisValues的最小值和最大值,以便我可以为数据设置合适的y轴范围。

我尝试使用以下代码获取最小值和最大值:

func rangeMinAndMax(){
    let minYvalue = minElement(yAxisValues)
    let maxYvalue = maxElement(yAxisValues)
}

但这会产生错误:通用参数' R.Generator.Element'不能绑定到非@objc协议类型' AnyObject'

- 问题:为什么以及如何解决?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:5)

在这样的情况下要做的就是扔掉所有误导性的渣滓并将其煮沸到最简单的情况:

let arr : [AnyObject] = [1,2,3]
let min = minElement(arr) // same error: "Generic parameter blah-de-blah..."

所以,你看,minElement不能处理AnyObject数组,而这正是错误告诉你的。原因很明显:AnyObject不是Comparable。没有"最低"对于一堆AnyObject的东西;一个AnyObject的整个概念是"小于"另一个AnyObject未定义。你需要将你的数组转换为minElement可以处理的数组,即某种可比较的数组。

例如,在该代码中,我可以解决这个问题:

let arr : [AnyObject] = [1,2,3]
let min = minElement(arr as [Int])

这就是你需要做的事情。当然,你所倾倒的东西取决于这些元素究竟是什么。它看起来好像可能分别是Double和NSDate,但这只是一个猜测;我不知道你阵列中的内容。你(推测)。请注意,NSDate不是可比较的,因此您将需要做更多的工作。