2016-07-18 4 views
-1

を反復私はいくつかのオブジェクトアクセスカスタムオブジェクトのプロパティ辞書

Struct object { 
    var title:String? 
} 

var one = object("green") 
var two = object("black") 
var three = object("blue") 

を持っていながらも、私は私が欲しい辞書

var dict = ["a":[one, two], "b":[three]] 

が辞書の値を反復処理してから起動するすべてのオブジェクトを見つけることである必要があり"b"。

for (key, value) in dict { 
    if value.lowercaseString.containsString(searchText.lowercaseString) 
} 

のようなものについていえ

私は、私は、私はこれに対処する方法を

value of type [object] has no member 'lowercaseString' 

のエラーが出ますか?

+2

あなたが動作しない投稿のコードを実行します。あなたが苦労しているコードを教えてください。 – vikingosegundo

+0

値はここでは文字列ではないため、value.lowercaseStringは機能しません。 – Khundragpan

答えて

1

キーと値を見て辞書を繰り返します。

しかし値は文字列ではなく文字列の配列です。それは構文エラーが含まれているよう

は、

import Foundation 

struct object { 
    var title:String? 
} 

var one = object(title:"green") 
var two = object(title:"black") 
var three = object(title:"blue") 

var dict = ["a":[one, two], "b":[three]] 

for (key, value) in dict { 
    for obj in value { 
     if let title = obj.title { 
      if title.lowercaseString.containsString(searchText.lowercaseString) { 
       // ... 
      } 
     } 
    } 

} 
+0

これは私が必要とするものです。ありがとう! –

+0

確かに、少し待たなければならない –

+0

私はいくつかの問題を修正しました。 – vikingosegundo

0

の上にあなたのコードで定義されているあなたのvalueは、「[オブジェクト]」ではなく、文字列オブジェクトの配列です:

var dict = ["a":[one, two], "b":[three]] 

だから、あなたが見つけるためにobjectの配列として値を処理する必要があなたが欲しいもの。

for (key, value) in dict { 
    let found = value.filter({ (anObject: object) -> Bool in 
     return anObject.title!.lowercaseString.containsString("b") 
    }) 

    if (found.count > 0) { 
     //you find what you want. 
    } 
} 
+0

いいえ、私は各値の内部を検索する必要があります。私はlowercaseStringを適用することができる各値要素のプロパティタイトルを取得するために幾分必要があります –