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

Swift中按预算区间(如Under $50)过滤数据的异常排查

问题分析与修复方案

核心问题1:平台过滤逻辑错误

你把预算过滤选项也混入了平台检查逻辑。matchesPlatform 使用 selectedFilters.allSatisfy 时,会把所有选中的过滤项(包括"Under $50"这类预算字符串)都当作平台去检查 campaign.socialLinks 是否包含,而预算选项显然不属于平台链接,导致 matchesPlatform 直接返回 false,最终即使预算符合条件,也会因为平台检查不通过被过滤掉。

核心问题2:预算过滤逻辑不严谨

当前预算过滤的分支只在部分条件下修改 matchesBudget,未覆盖所有场景:

  • 比如"Under $50"分支,仅当预算≤50时设为true,但如果预算>50,matchesBudget会保持默认的true,导致不符合条件的Campaign也被保留;
  • 其他预算分支仅在不符合时设为false,但如果同时选中多个预算选项(虽然业务上可能不会,但逻辑上有漏洞),会出现覆盖问题。

修复后的过滤逻辑代码

var filteredCampaigns: [CampaignPostModel] {
    guard !selectedFilters.isEmpty else {
        return localCampaignManager.allCampaigns
    }
    
    return localCampaignManager.allCampaigns.filter { campaign in
        let budgetValue = campaign.budget
        var matchesBudget = true
        var matchesPlatform = true
        
        // 分离平台过滤和预算过滤的选项
        let platformFilters = selectedFilters.filter { !["Under $50", "$50-$100", "$100-$499", "$500 and above"].contains($0) }
        let budgetFilters = selectedFilters.filter { ["Under $50", "$50-$100", "$100-$499", "$500 and above"].contains($0) }
        
        // 平台过滤:仅检查平台类选项
        if !platformFilters.isEmpty {
            matchesPlatform = platformFilters.allSatisfy { campaign.socialLinks.contains($0) }
        }
        
        // 预算过滤:仅处理预算类选项
        if !budgetFilters.isEmpty {
            // 业务上通常只会选一个预算区间,这里默认取第一个选中的预算选项
            guard let selectedBudgetFilter = budgetFilters.first else {
                matchesBudget = false
                return matchesPlatform && matchesBudget
            }
            
            switch selectedBudgetFilter {
            case "Under $50":
                matchesBudget = budgetValue <= 50
            case "$50-$100":
                matchesBudget = budgetValue >= 50 && budgetValue < 100
            case "$100-$499":
                matchesBudget = budgetValue >= 100 && budgetValue < 500
            case "$500 and above":
                matchesBudget = budgetValue >= 500
            default:
                matchesBudget = true
            }
        }
        
        return matchesPlatform && matchesBudget
    }
}

修复说明

  1. 分离过滤类型:把选中的过滤项拆分为平台类和预算类,分别处理,避免预算选项干扰平台检查;
  2. 简化预算逻辑:直接通过赋值判断结果,覆盖所有场景,避免默认值导致的错误;
  3. 兼容多预算选择:虽然业务上一般只会选一个预算区间,但代码中通过取第一个选中的预算选项处理,避免逻辑冲突;
  4. 优化代码结构:使用guard提前返回空过滤的情况,让逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:14:57