2016-05-30 20 views
0
迅速

で[ANYOBJECT]型の配列から要素を見つけることができますどのように持っている[ANYOBJECT]配列我々は

var updatedPos = [AnyObject]() 

私のように私の要求に応じてその中にデータを設定しています!私はIDがここでの要件によるとマッチしたばかり、この配列からオブジェクトを削除するには、いくつかの要件は、私が

for var i = 0; i < updatedPos.count; i++ 
     { 
      let posItem = updatedPos[i] 
      print("Id=\(posItem)") 
      let pId = posItem["id"] as? String 
      print("secRId=\(pId)") 

      if removeId! == pId! 
      { 
       updatedPos.removeAtIndex(i) 
      } 
     } 

を実装しようとしているコードである必要があり、私のコードで今すぐ

let para:NSMutableDictionary = NSMutableDictionary() 
para.setValue(posId, forKey: "id") 
para.setValue(posName, forKey: "job") 
let jsonData = try! NSJSONSerialization.dataWithJSONObject(para, options: NSJSONWritingOptions()) 
let jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding) as! String 
self.updatedPos.append(jsonString) 

ここでprint("Id=\(posItem)")Id={"id":"51","job":"Programmer"}として私に出力を与えますが、ここではidにアクセスできません。ここprint("secRId=\(pId)")ゼロ を与えるいずれかが、私はここで何をしないのです、ここで私を助けてくださいすることができ、すべての

+0

なぜコレクションタイプ(辞書)ではなくJSON文字列を保存しますか? – vadian

+0

@vadianこれは私の必要条件です。私はこのオブジェクトから 'id'を必要とします –

+0

質問はなぜ**文字列**と**辞書**を保存しませんか? – vadian

答えて

0
  • まず、ネイティブスウィフトコレクション型を使用するありがとうございました。
  • 2番目のすべての使用タイプは可能な限り具体的です。あなたの[AnyObject]配列も[[String:AnyObject]]

    var updatedPos = [[String:AnyObject]]() 
    

    今の辞書を作成して、あなたの例では辞書が実際に[String:String]ですが、私は保つ(配列に追加する辞書の配列として宣言することができます例えば

AnyObject値)。

let para1 : [String:AnyObject] = ["id" : "51", "job" : "Programmer"] 
let para2 : [String:AnyObject] = ["id" : "12", "job" : "Designer"] 
updatedPos.append(para1) 
updatedPos.append(para2) 

あなたはJSONのシリアル化を使用すると、提供されたコードは必要ありません

let removeId = "12" 
updatedPos = updatedPos.filter { $0["id"] as? String != removeId } 

または代わり

if let indexToDelete = updatedPos.indexOf{ $0["id"] as? String == removeId} { 
    updatedPos.removeAtIndex(indexToDelete) 
} 

フィルタ機能を使用しidて項目を削除する場合。

PS:正確に何をしているのかわからない限り、valueForKey:setValue:forKey:を書かないでください。

+0

それは私が 'id = {" id ":" 51 "、" job ":" Programmer "からアイテムを得ることができますか? } '。なぜ私はこれをJsonの文字列に変換しているのか忘れてしまった。 –

+0

もう一度、あなたのコード 'jsonString'はリテラル** String **であるので、項目はありません。 JSONシリアライゼーションが不要な場合は、質問を編集して無関係のコードを削除してください。 – vadian

+0

しかし、私はAPIにデータを送信するとき、私はJSONオブジェクトにこのデータが必要です。だからこそ私はこのことを作り出したのです。 –

0

私の質問には、非常に簡単で最良の解決策を見つけました。 @vadianに特別な感謝をしたいと思います。彼は私にここで新しいことを教えてくれるから。

ねえありがとう非常に多くの@vadian最後の答えは、私は、この文字列は Id={"id":"51","job":"Programmer"}から

idを見つけるためjson Formatで秘密posItemを持っている、道は

let data = posItem.dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: false) 
    do { 
     let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) 
     if let dict = json as? [String: AnyObject] { 
      let id = dict["id"] 
      if removeId! == id! as! String 
      { 
       updatedLoc.removeAtIndex(i) 
      }   
      } 
     } 
    catch { 
     print(error) 
    } 

そして、これがための完璧な作業です私が欲しいもの