2016-05-30 36 views
0

找到[AnyObject]類型的數組中的元素我有[AnyObject]數組我們如何能迅速

var updatedPos = [AnyObject]() 

我根據就像我的要求設定的數據!

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) 

現在在我的代碼我有一些要求,從這個數組,其中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) 
      } 
     } 

代碼這裏print("Id=\(posItem)")給我輸出爲Id={"id":"51","job":"Programmer"},但在這裏我不能從此對象訪問ID。這裏print("secRId=\(pId)")給我 可以請任何一個幫助我在這裏我失去了什麼在這裏,謝謝

+0

爲什麼要保存JSON字符串而不是集合類型(字典)? – vadian

+0

@vadian這是我的要求,我只需要從這個對象'ID' –

+0

問題是爲什麼你保存**字符串**而不是**字典**? – vadian

回答

0
  • 首先是使用本地雨燕集合類型。
  • 其中所有使用類型儘可能具體。

例如您[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) 

如果您想通過id刪除一個項目使用過濾功能

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

或可替代

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

不需要爲您提供的代碼的JSON序列化。

PS:永遠不要寫valueForKey:setValue:forKey:,除非你確切地知道它在做什麼。

+0

這可能是最好的解決方案,我沒有嘗試,我會稍後嘗試,我只需要一個簡單的建議,我們可以從'Id = {「id」:「51」,「工作」:「程序員」 }'。忘了其他爲什麼我將它轉換成Json字符串。我真的會非常感謝你,如果你能爲我提供解決方案我的代碼 –

+0

再一次,根據你的代碼'jsonString'是一個文字** String **,沒有項目。如果您不需要JSON序列化,請編輯您的問題並刪除不相關的代碼。 – vadian

+0

但是當我發送數據到API然後我需要這個數據到JSON對象。這就是爲什麼我創造了這個東西。 –

0

經過一些有點東西,我發現了我的問題非常簡單和最好的解決方案。我想特別感謝@vadian。因爲他在這裏教我新東西。嘿,非常感謝您@vadian

最後的答案是我在json Format有隱蔽posItemId={"id":"51","job":"Programmer"}找到id這個字符串

的,路是

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) 
    } 

,這是對工作的完美我想要什麼