2016-05-30 35 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) 
    } 

,这是对工作的完美我想要什么