2017-10-27 5 views
0

名前がTransaction、属性がamountのエンティティがあります。 私は属性コアデータ属性スウィフトから配列を宣言する

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

から配列を宣言するために、この方法を実行しようとしてい配列のサンプルコード

sum = array_name.reduce(0,+)

合算を使用することができますamount属性から配列を宣言したいだろうがそれは動作していないとエラーをスローする

Ambiguous reference to member '+' 
+1

これは、SwiftでNSArrayを使用しない**の理由の例です。 NSArrayは型情報を提供しません。コンパイラは、 '+'はアイテムを追加(数値)するか、それらを連結する(文字列)か、または包含する型が演算子 '+'にも応答するかどうかを知りません。 – vadian

+0

'let sum = transactionsArray.reduce(0){$ 0 + $ 1.amount}'のようなものは、NSArrayやKVCなしで動作するはずです。 –

+0

お返事ありがとうございます。私はそれを試みましたが、エラーが発生しました。「式の種類がコンテキストなしであいまいです」 – Harry

答えて

0

を使用して、Swift 4、@ MartinRの提案うまくいくはず。そうでない場合は、具体的にはTransactionの詳細、amount変数のタイプ、正確な性質はtransactionsArrayなど、コードに関する詳細情報を提供する必要があります。 transactionsArrayは非オプション[Transaction]として宣言し、amountことをコアデータの数値型の一つであると仮定すると

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

は...正しいです。 (私はちょうどDoubleを推測している、ここでamountと同じタイプを使用してください)

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

:あなたはsumのタイプを宣言することで、それは少しより明確になるかもしれません。

それは、as? Doubleが原因で言及@vadian NSArrayの型情報の不足のために必要とされる例えば

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

NSArray@sumオペレータとの合計を取得することが可能です。

+0

TextFieldに二重の値を割り当てる間違った方法で間違いを犯しました。 – Harry

関連する問題