迅速にSwiftにarray.valueForKeyを書き込む方法は?
[results valueForKey:@"attribute"]
を書くための最も便利なコードは何ですか? 私は閉鎖してマップ()関数を使用することをお勧めしますことをhereを見つけた:
swiftarray.map({$0["attribute"]})
N.B. swiftarrayはわからないNSArrayの
迅速にSwiftにarray.valueForKeyを書き込む方法は?
[results valueForKey:@"attribute"]
を書くための最も便利なコードは何ですか? 私は閉鎖してマップ()関数を使用することをお勧めしますことをhereを見つけた:
swiftarray.map({$0["attribute"]})
N.B. swiftarrayはわからないNSArrayの
次使用する必要があります何が最も便利なコードを書くのですか
速いですか?
になること:
results.valueForKey("attribute")
、私はタイプのエラー'値が「[TestObject]」明らかにあなたが送信するオブジェクトを一切メンバーのvalueForKey'' –
@JamesWebsterを持っていません取得'valueForKey'はNSObjectから派生したクラスでなければなりません。配列を持っているなら、それはNSArrayでなければならず、その要素はNSObjectの派生物である必要があります。しかし、それはOPが(限り私が言うことができる限り)尋ねたものではない...それとも? – matt
@Mattなぜあなたは配列がNSObjectから派生したものだと思いますか?これは迅速な配列であり、NSArrayではありません。また、メッセージにはメンバー 'valueForKey'がありません。それ以外の場合は、本当に愚かなものになります。 – aneuryzm
あなたのクラスには、添字を持っていますか?
私はそうのようなKVCアクセサを使用することができ、テストクラスを作成することができました:
次のコードでテストclass TestObject
{
var name:String
var numbers:[String:Int] = [String:Int]()
init(name:String)
{
self.name = name
}
subscript(index: String) -> Int? {
get {
return numbers[index]
}
set(newValue) {
numbers[index] = newValue
}
}
}
:
:let testObject1 = TestObject(name: "test1")
testObject1["home-phone"] = 1234
testObject1["mobile-phone"] = 5678
let testObject2 = TestObject(name: "test2")
testObject2["office"] = 0987
testObject2["mobile-phone"] = 6543
let array : [TestObject] = [testObject1, testObject2]
var results = array.map({$0["office"]})
print("Results:\(results)")
results = array.map({$0["mobile-phone"]})
print("Results:\(results)")
は、次の結果を生成します
Results:[nil, Optional(987)]
Results:[Optional(5678), Optional(6543)]
何らかの理由で私のコンピュータは、それはもはや(...便利)任意のスウィフトコードを実行しようと決めていないが、私はあなたが実行することができますかなり確信していますこれだけで括弧を削除しますか?おそらく両方の方法が有効だと思う。あなたは遊び場でこれを試しましたか? TBH、あなたが得たエラーが、あなたが投稿したコードにどのように関係しているのか分かりません。それは間違いなくそれからですか? – Fogmeister
ユースケース全体を投稿できますか?あなたの配列はどんなタイプですか? – Sulthan
@Fogmeister "私のコンピュータは、もうスウィフトコードを実行したくないと判断しました。"うわー、私はそれについてもっと知りたいと思うよ! – matt