0

我有 [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)")给我

4

2 回答 2

1
  • 首先使用原生 Swift 集合类型。
  • 其次,使用类型尽可能具体。

例如,您的[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:除非你确切地知道它在做什么。

于 2016-05-30T10:26:23.703 回答
0

经过一些小事后,我找到了解决我问题的非常简单和最佳的解决方案。我要特别感谢@vadian。因为他在这里教我新东西。嘿,非常感谢@vadian

最后答案是我偷偷地从这个字符串posItemjson Format找到idId={"id":"51","job":"Programmer"}

方法是

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)
     }
于 2016-06-01T05:35:36.900 回答