2016-03-24 22 views
3

迅速にSwiftにarray.valueForKeyを書き込む方法は?

[results valueForKey:@"attribute"] 

を書くための最も便利なコードは何ですか? 私は閉鎖してマップ()関数を使用することをお勧めしますことをhereを見つけた:

swiftarray.map({$0["attribute"]}) 

N.B. swiftarrayはわからないNSArrayの

+0

何らかの理由で私のコンピュータは、それはもはや(...便利)任意のスウィフトコードを実行しようと決めていないが、私はあなたが実行することができますかなり確信していますこれだけで括弧を削除しますか?おそらく両方の方法が有効だと思う。あなたは遊び場でこれを試しましたか? TBH、あなたが得たエラーが、あなたが投稿したコードにどのように関係しているのか分かりません。それは間違いなくそれからですか? – Fogmeister

+0

ユースケース全体を投稿できますか?あなたの配列はどんなタイプですか? – Sulthan

+1

@Fogmeister "私のコンピュータは、もうスウィフトコードを実行したくないと判断しました。"うわー、私はそれについてもっと知りたいと思うよ! – matt

答えて

5

I'amはありませんが、あなたは辞書以外の配列(または添え字をサポートしている他のタイプ)で、いくつかのオブジェクトを持っている場合は、コード

results.map({$0.attribute}) 
+0

:「ANYOBJECTは」何のメンバー「属性名」 – aneuryzm

+0

を持っていない、あなたはあなたをキャストする必要があるが、私は簡潔クロージャを使用することはできませんあなたの結果の配列 –

+0

に含まれている実際のオブジェクト型にANYOBJECT私は閉鎖の署名にパラメータの型を指定する必要がありますので、あなたは、あなたの答えに書いている。 – aneuryzm

-1

次使用する必要があります何が最も便利なコードを書くのですか

速いですか?

になること:

results.valueForKey("attribute") 
+1

、私はタイプのエラー'値が「[TestObject]」明らかにあなたが送信するオブジェクトを一切メンバーのvalueForKey'' –

+1

@JamesWebsterを持っていません取得'valueForKey'はNSObjectから派生したクラスでなければなりません。配列を持っているなら、それはNSArrayでなければならず、その要素はNSObjectの派生物である必要があります。しかし、それはOPが(限り私が言うことができる限り)尋ねたものではない...それとも? – matt

+2

@Mattなぜあなたは配列がNSObjectから派生したものだと思いますか?これは迅速な配列であり、NSArrayではありません。また、メッセージにはメンバー 'valueForKey'がありません。それ以外の場合は、本当に愚かなものになります。 – aneuryzm

0

あなたのクラスには、添字を持っていますか?

私はそうのような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)] 
関連する問題