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

Swift中如何比较类内部嵌套Struct的属性并解决filter使用报错?

错误原因
  • filter 方法的闭包仅接收1个入参(代表当前遍历到的数组元素),你在闭包内使用了$0、$1两个参数,不符合方法定义,因此触发参数数量不匹配的报错。
  • scoredGoal、passedGoal均为Int类型,你设置的兜底默认值是空字符串"",类型不兼容,即便修复参数问题也会触发类型错误。
实现方案

你需要先单独取出数组的第一个元素作为对比基准,再在filter遍历中把每个元素和基准对比即可,代码如下:

// 先安全取出数组第一个元素作为对比基准,避免数组为空崩溃
guard let firstTeam = twoTeams.first, let firstGoal = firstTeam.goalsDifference else {
    // 数组为空/第一个元素没有goalsDifference的自定义处理逻辑
    return
}

// 筛选符合对比规则的元素,以下示例规则为scoredGoal、passedGoal均大于第一个元素
let filteredTeams = twoTeams.filter { currentTeam in
    // 安全解包当前元素的goalsDifference
    guard let currentGoal = currentTeam.goalsDifference else {
        return false
    }
    // 可根据实际需求修改对比规则
    return currentGoal.scoredGoal > firstGoal.scoredGoal && currentGoal.passedGoal > firstGoal.passedGoal
}

如果你的数组固定只有2个元素,也可以直接取出两个元素对比,无需遍历:

guard twoTeams.count >= 2,
      let goal1 = twoTeams[0].goalsDifference,
      let goal2 = twoTeams[1].goalsDifference else {
    return
}
// 对比两个属性
let isScoredLarger = goal1.scoredGoal > goal2.scoredGoal
let isPassedLarger = goal1.passedGoal > goal2.passedGoal

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:36:02