我想从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或其他任何问题。这是一个数据问题。上面的代码工作正常。
答案 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的代码并确认它正在运行。