一尘不染

在数组中查找具有属性的对象

swift

是否有可能从具有特定属性的数组中获取对象?还是我需要遍历数组中的所有对象并检查属性是否是我正在寻找的特定对象?

编辑:谢谢你给我正确的方向,但我有一个转换此问题。

//再编辑一次:好的,如果只有一个特定的结果?这也是可行的方法吗?

let imageUUID = sender.imageUUID


let questionImageObjects = self.formImages[currentSelectedQuestion.qIndex] as [Images]!

    // this is working
    //var imageObject:Images!
    /*
    for (index, image) in enumerate(questionImageObjects) {

        if(image.imageUUID == imageUUID) {
            imageObject = image
        }

    }
    */

// this is not working - NSArray is not a subtype of Images- so what if there is only 1 possible result?
var imageObject = questionImageObjects.filter( { return $0.imageUUID == imageUUID } )

阅读 401

收藏
2020-07-07

共1个答案

一尘不染

//这不起作用-NSArray不是Images的子类型-那么如果只有1种可能的结果怎么办?

您无法在编译时证明数组上只有一个可能的结果。您实际要的是第 一个 匹配结果。最简单(尽管不是最快)是仅获取filter结果的第一个元素:

let imageObject = questionImageObjects.filter{ $0.imageUUID == imageUUID }.first

imageObject 现在当然是可选的,因为可能没有匹配项。

如果搜索整个数组很费时,您当然可以轻松创建一个firstMatching函数,该函数将返回与闭包匹配的(可选)第一个元素,但是对于较短的数组,这很好且简单。


查尔斯指出,在Swift 3中内置了:

questionImageObjects.first(where: { $0.imageUUID == imageUUID })
2020-07-07