自定义对象在 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 的代码并确认它可以正常工作。