You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift数组搜索与结果展示实现咨询:多条件及年龄筛选

Swift数组搜索与过滤常见问题解答

1. 如何在数组内执行搜索并返回所有匹配数据

在Swift开发里,最直观高效的方式就是用filter(_:)方法——它会遍历数组,返回所有符合你设定条件的元素组成的新数组,而且不会修改原数组。

比如你想做一个不区分大小写的用户名搜索,找所有包含"john"的用户,可以这么写:

let searchKeyword = "john"
let matchedUsers = allUsers.filter { user in
    user.userName.lowercased().contains(searchKeyword.lowercased())
}

用lowercased()处理是为了避免大小写差异导致的漏匹配,这个细节在实际搜索场景里特别实用。

2. 如何在数组内搜索多个目标数据并展示匹配结果

分两种常见场景来处理,覆盖大部分开发需求:

场景一:同时满足多个条件

比如你想找年龄大于25且是VIP的用户,直接在filter里用逻辑与&&串联条件即可:

let targetUsers = allUsers.filter { user in
    user.age > 25 && user.isVip
}

场景二:匹配多个目标中的任意一个

比如你想筛选来自中国、美国、日本的用户,可以先把目标值存到集合里,再用contains(_:)判断:

let targetCountries = ["China", "United States", "Japan"]
let matchedUsers = allUsers.filter { user in
    targetCountries.contains(user.userCountry)
}

如果是多关键词搜索用户名,也可以用嵌套的contains实现:

let targetKeywords = ["John", "Alice", "Bob"]
let matchedUsers = allUsers.filter { user in
    targetKeywords.contains { keyword in
        user.userName.lowercased().contains(keyword.lowercased())
    }
}

3. 结合给定代码,展示allUsers数组中年龄大于25的所有用户

针对你提供的UserInformationModel和GetUserInformationViewModel,我分两步实现完整的展示逻辑:

第一步:在ViewModel中添加过滤逻辑

给ViewModel加一个计算属性,实时返回年龄大于25的用户,这样数据更新时会自动同步:

class GetUserInformationViewModel: ObservableObject { 
    @Published var allUsers = [UserInformationModel]() 
    
    // 计算属性:自动过滤年龄>25的用户
    var filteredUsersOver25: [UserInformationModel] {
        allUsers.filter { $0.age > 25 }
    }
}

第二步:在SwiftUI视图中渲染结果

假设用SwiftUI展示,直接绑定ViewModel的过滤属性,用List渲染即可:

struct UserListView: View {
    @StateObject private var viewModel = GetUserInformationViewModel()
    
    var body: some View {
        NavigationStack {
            List(viewModel.filteredUsersOver25) { user in
                VStack(alignment: .leading) {
                    Text(user.userName)
                        .font(.headline)
                    Text("年龄:\(user.age) | 国家:\(user.userCountry)")
                        .font(.subheadline)
                        .foregroundColor(.secondary)
                }
            }
            .navigationTitle("年龄大于25的用户")
            .onAppear {
                // 模拟加载测试数据
                viewModel.allUsers = [
                    UserInformationModel(isVip: true, userIsMale: true, userName: "张三", age: 30, userCountry: "China", countryIsoCode: "CN", uid: "1"),
                    UserInformationModel(isVip: false, userIsMale: false, userName: "李四", age: 24, userCountry: "China", countryIsoCode: "CN", uid: "2"),
                    UserInformationModel(isVip: true, userIsMale: true, userName: "Mike", age: 28, userCountry: "United States", countryIsoCode: "US", uid: "3")
                ]
            }
        }
    }
}

这样当allUsers数据变化时,filteredUsersOver25会自动重新计算,视图也会实时刷新展示符合条件的用户。

内容的提问来源于stack exchange,提问作者user14785646

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:41:52