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

SwiftUI中如何按值引用数组索引并返回所有匹配项?

解决方案

你的辅助函数逻辑本身是正确的,filter会返回所有符合条件的元素,只返回单个结果大概率是以下原因:

  • equipments数组中不存在同时包含"Barbell"和"Dumbbell"的元素(比如拼写错误、大小写不一致)
  • 函数调用或数组定义存在其他隐性问题

以下是更可靠的实现方式,同时支持按名称批量获取MuscleGroup和Equipment:

1. 给数组添加扩展(更简洁易用)

为[MuscleGroup]和[Equipment]添加扩展方法,直接通过名称数组获取匹配元素:

// 补充完整结构体定义示例
struct Equipment: Identifiable {
    var id = UUID()
    var name: String
    // 其他属性...
}

struct MuscleGroup: Identifiable {
    var id = UUID()
    var name: String
    // 其他属性...
}

// Equipment数组扩展:按名称筛选
extension Array where Element == Equipment {
    func byNames(_ names: [String], caseSensitive: Bool = true) -> [Equipment] {
        filter { equipment in
            if caseSensitive {
                return names.contains(equipment.name)
            } else {
                return names.contains { $0.lowercased() == equipment.name.lowercased() }
            }
        }
    }
}

// MuscleGroup数组扩展:按名称筛选
extension Array where Element == MuscleGroup {
    func byNames(_ names: [String], caseSensitive: Bool = true) -> [MuscleGroup] {
        filter { muscleGroup in
            if caseSensitive {
                return names.contains(muscleGroup.name)
            } else {
                return names.contains { $0.lowercased() == muscleGroup.name.lowercased() }
            }
        }
    }
}

2. 验证数据源

先确认equipments和muscleGroups数组中确实包含目标元素,比如:

let equipments: [Equipment] = [
    Equipment(name: "Barbell"),
    Equipment(name: "Dumbbell"),
    Equipment(name: "Ab Wheel")
]

let muscleGroups: [MuscleGroup] = [
    MuscleGroup(name: "Core"),
    MuscleGroup(name: "Shoulders")
]

3. 按名称创建Exercise实例

现在可以直接通过名称数组获取对应的元素数组:

let exercises = [
    Exercise(
        name: "Ab Wheel",
        muscleGroup: muscleGroups.byNames(["Core", "Shoulders"]),
        equipment: equipments.byNames(["Barbell", "Dumbbell"])
    )
]

排查要点

  • 检查equipments和muscleGroups中的元素名称是否与传入的字符串完全一致(包括大小写),如果需要忽略大小写,调用时传caseSensitive: false即可
  • 打印equipments.byNames(["Barbell", "Dumbbell"])的结果,确认返回的数组元素数量是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:20:11