基本上我的模型对象包含另一个模型对象,并且我希望从主要模型对象内部的模型中进行搜索/过滤,请检查以下内容以获取更多说明。
ffmpeg
当在该模型中创建我的最终模型对象时,我想要过滤器,该过滤器应根据用户输入的宠物名称来过滤主模型。
例如,如果模型中的一位用户有2只宠物,一只宠物是黑色,另一只是白色。 然后,模型中的第二位用户有2只宠物,一只宠物是灰色,另一只是棕色。
现在当用户搜索时,具有白色宠物的用户可以出现在列表中。在这种情况下,列表将显示第一个用户。这样。
我尝试了下面的代码,但是它不起作用::
ffprobe
谢谢!
答案 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
}