自定义对象在 NSArray 过滤器后丢失 属性 数据
Custom object lost property data after NSArray filter
我想从 NSArray
中查询一个自定义对象,这是我写的一个函数:
func retrieveObject (objects: [CustomClass], identifier : String) -> CustomClass {
var retrievedObject : [CustomClass] = objects.filter({
return [=11=].identifier == identifier
})
return retrievedObject.first!
}
当我使用它时,生成的对象似乎丢失了该对象中的大部分 属性 值:
let obj : CustomClass = self.retrieveObject(objectList as! [CustomClass], "one")
println("\(obj.propertyA)")
结果显示“”,而打印原始对象列表中的对象显示值:
println("\(objectList.first!.propertyA)")
似乎是什么问题?
更多信息:
上面的 objectList 是一个异步网络请求的结果,我们假设其中的对象没有问题,因为它们 return 在打印时是正确的 属性 值。
数组过滤前上一步代码:
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 或其他任何问题。这是一个数据问题。上面的代码工作正常。
不确定,您提供给我们的代码似乎没有任何问题。我在操场上重新创建了它,似乎打印正常。
代码:
class CustomClass {
let identifier: String
let propertyA = "Printing!"
init(identifier: String) {
self.identifier = identifier
}
}
let objectList = [CustomClass(identifier: "one")]
func retrieveObject (objects: [CustomClass], identifier: String) -> CustomClass {
return objects.filter { [=10=].identifier == identifier }.first!
}
let object = retrieveObject(objectList, "one")
println("\(object.propertyA)") // Prints "Printing!"
println("\(objectList.first!.propertyA)") // Prints "Printing!"
编辑:
稍微简化一下
行除外:
var retrievedObject : [CustomClass] = objects.filter({
return [=10=].identifier == identifier
})
应该是:
var retrievedObject : [CustomClass] = objects.filter { [=11=].identifier == identifier;};
在您的版本中,您为过滤器参数传递了一个奇怪的值(因为括号放错了地方),它与等待的过滤器参数类型不匹配:(T) -> Bool
我测试了 Jacobson 的代码并确认它可以正常工作。
我想从 NSArray
中查询一个自定义对象,这是我写的一个函数:
func retrieveObject (objects: [CustomClass], identifier : String) -> CustomClass {
var retrievedObject : [CustomClass] = objects.filter({
return [=11=].identifier == identifier
})
return retrievedObject.first!
}
当我使用它时,生成的对象似乎丢失了该对象中的大部分 属性 值:
let obj : CustomClass = self.retrieveObject(objectList as! [CustomClass], "one")
println("\(obj.propertyA)")
结果显示“”,而打印原始对象列表中的对象显示值:
println("\(objectList.first!.propertyA)")
似乎是什么问题?
更多信息:
上面的 objectList 是一个异步网络请求的结果,我们假设其中的对象没有问题,因为它们 return 在打印时是正确的 属性 值。
数组过滤前上一步代码:
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 或其他任何问题。这是一个数据问题。上面的代码工作正常。
不确定,您提供给我们的代码似乎没有任何问题。我在操场上重新创建了它,似乎打印正常。
代码:
class CustomClass {
let identifier: String
let propertyA = "Printing!"
init(identifier: String) {
self.identifier = identifier
}
}
let objectList = [CustomClass(identifier: "one")]
func retrieveObject (objects: [CustomClass], identifier: String) -> CustomClass {
return objects.filter { [=10=].identifier == identifier }.first!
}
let object = retrieveObject(objectList, "one")
println("\(object.propertyA)") // Prints "Printing!"
println("\(objectList.first!.propertyA)") // Prints "Printing!"
编辑:
稍微简化一下
行除外:
var retrievedObject : [CustomClass] = objects.filter({
return [=10=].identifier == identifier
})
应该是:
var retrievedObject : [CustomClass] = objects.filter { [=11=].identifier == identifier;};
在您的版本中,您为过滤器参数传递了一个奇怪的值(因为括号放错了地方),它与等待的过滤器参数类型不匹配:(T) -> Bool
我测试了 Jacobson 的代码并确认它可以正常工作。