【问题标题】:Declare an array from Core Data Attribute Swift从核心数据属性 Swift 中声明一个数组
【发布时间】:2017-10-27 13:59:56
【问题描述】:

我有一个名为:Transaction 的实体和一个名为:amount 的属性。 我想从amount 属性声明一个数组,该属性可以使用求和数组示例代码

sum = array_name.reduce(0,+)

我正在尝试用这种方式从属性声明一个数组

var amountArray = 
 (self.transactionsArray as NSArray).value(forKey: "amount") as! NSArray
sum = amountArray.reduce(0,+)

但它不起作用并抛出错误

Ambiguous reference to member '+'

【问题讨论】:

  • 这是一个完美的例子,为什么你应该不在 Swift 中使用NSArray。 NSArray 不提供任何类型信息。编译器根本不知道+ 是否意味着添加项目(数字)或连接它们(字符串),或者包含类型是否甚至响应运算符+。
  • let sum = transactionsArray.reduce(0) { $0 + $1.amount } 之类的东西应该可以工作,没有 NSArray 或 KVC。
  • 感谢您的回复。我试过了,但它有一个错误“表达式类型不明确,没有更多上下文”

标签: arrays swift core-data


【解决方案1】:

使用 Swift 4,@MartinR 的建议应该可行。如果没有,您应该提供有关您的代码的更多信息,可能特别是关于Transaction 的详细信息、amount 变量的类型以及transactionsArray 的确切性质。

假设transactionsArray 被声明为非可选[Transaction] 并且amount 是Core Data 数字类型之一,

let sum = transactionsArray.reduce(0) { $0 + $1.amount }

...是正确的。您可以通过声明sum 的类型来使其更加明确:

let sum : Double = transactionsArray.reduce(0) { $0 + $1.amount }

(确保在这里使用与amount相同的类型,我只是在猜测Double)。

例如,可以使用 NSArray 和 @sum 运算符获得总和

if let sum = (transactionsArray as NSArray).value(forKeyPath:"@sum.amount") as? Double {
    ....
}

需要as? Double,因为@vadian 提到的NSArray 上缺少类型信息。

【讨论】:

  • 非常感谢,我成功了,我犯了一个错误,因为错误地将双精度值分配给 TextField。 ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多