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
相关产品推荐
相关产品推荐

