NSArray过滤器后自定义对象丢失属性数据

时间:2015-05-13 07:15:44

标签: ios swift properties nsarray

我想从NSArray查询自定义对象,这是我写的函数:

func retrieveObject (objects: [CustomClass], identifier : String) -> CustomClass {
    var retrievedObject : [CustomClass] = objects.filter({
        return $0.identifier == identifier
    })

    return retrievedObject.first!
}

当我使用它时,结果对象似乎丢失了该对象中的大多数属性值:

let obj : CustomClass = self.retrieveObject(objectList as! [CustomClass], "one")
println("\(obj.propertyA)")

结果显示“”,而从原始对象列表打印对象显示值:

println("\(objectList.first!.propertyA)")

似乎是什么问题?

更多信息:

上面的objectList是异步Web请求的结果,我们假设其中的对象没有问题,因为它们在打印时会返回正确的属性值。

阵列过滤器之前的一步代码:

private var objectList : [AnyObject]!
private var object : CustomClass

self.webRequest(request, onSuccess: {(objects: [AnyObject]!) -> Void in
    self.objectList = objects
    self.object = self.retrieveObject(self.objectList, identifier: "one") 
//I tried passing both self.objectList and objects
})

解决了问题

这不是Swift或其他任何问题。这是一个数据问题。上面的代码工作正常。

2 个答案:

答案 0 :(得分:0)

不确定,您提供给我们的代码似乎没有任何问题。我在游乐场重新创建它,似乎正常打印。

<强>代码:

[AcceptVerbs("GET")]
    [Route("status")]
    public IHttpActionResult ChangeTaskStatus(string task)
    {
        ChangeStatusViewModel status = JsonConvert.DeserializeObject<ChangeStatusViewModel>(task);
        int result = repo.ChangeStatus(status);
        if (result < 1)
        {
            return NotFound();
        }

       // mail.Send(db.GetUserList(db.GetGroup(status.Id)));

        var detail = repo.GetTaskDetail(status.Id);
        return Ok(detail);
    }

修改
简化了一下

答案 1 :(得分:0)

除了行:

var retrievedObject : [CustomClass] = objects.filter({
        return $0.identifier == identifier
    })

应该是:

var retrievedObject : [CustomClass] = objects.filter { $0.identifier == identifier;};

在您的版本中,您为过滤器参数传递一个奇怪的值(因为错误的括号),它与等待的过滤器参数类型不匹配:(T) -> Bool

我测试了Jacobson的代码并确认它正在运行。