过滤器在模型对象中不起作用-Swift

时间:2018-10-11 17:07:35

标签: swift

基本上我的模型对象包含另一个模型对象,并且我希望从主要模型对象内部的模型中进行搜索/过滤,请检查以下内容以获取更多说明。

ffmpeg

当在该模型中创建我的最终模型对象时,我想要过滤器,该过滤器应根据用户输入的宠物名称来过滤主模型。

例如,如果模型中的一位用户有2只宠物,一只宠物是黑色,另一只是白色。 然后,模型中的第二位用户有2只宠物,一只宠物是灰色,另一只是棕色。

现在当用户搜索时,具有白色宠物的用户可以出现在列表中。在这种情况下,列表将显示第一个用户。这样。

我尝试了下面的代码,但是它不起作用::

ffprobe

谢谢!

3 个答案:

答案 0 :(得分:0)

基于评论。您需要使用“宠物”(例如数组)代替字典,并检查 colour 。像这样:

let usersFiltered = users.filter { (user) -> Bool in
    return user.pets.contains(where: { $0.colour == "white" })
}

答案 1 :(得分:0)

您的结构:

struct User {
    var name: String
    var age: Int
    var hasPet: Bool
    var pets: [Pet]
}

struct Pet {
    var id: Int
    var petName: String
    var colour: String
}

用户和宠物对象:

 let pet1 = Pet(id: 1, petName: "Lucy", colour: "black, white")
 let pet2 = Pet(id: 2, petName: "Nemo", colour: "white")
 let pet3 = Pet(id: 3, petName: "Scooby-Doo", colour: "white")
 let pet4 = Pet(id: 4, petName: "Garfield", colour: "brown, whiteerktjdfg")

 let user1 = User(name: "Joe", age: 20, hasPet: true, pets: [pet1, pet2])
 let user2 = User(name: "Sophia", age: 30, hasPet: true, pets: [pet3, pet4])

 let users = [user1, user2]

您可以使用以下代码过滤拥有白色宠物的用户:

    let whitePets = users.compactMap{user -> (User?) in
        var userWithWhitePets = user
        let pets = userWithWhitePets.pets.filter{$0.colour.contains("white")}
        userWithWhitePets.pets = pets
        return userWithWhitePets.pets.count > 0 ? userWithWhitePets : nil

    }

希望这会对您有所帮助:)

答案 2 :(得分:0)

我认为对hasPet使用计算属性也会更好。

如果没有,那么每次将第一个宠物添加到数组中或从数组中删除所有元素时,都还需要更新var hasPet:Bool。

 var hasPet: Bool{
    return pets.count > 0
}