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

SwiftUI使用LazyVGrid时优雅生成重复时间整数数组的方法问询

优雅生成目标数组的两种实现方案

方案1:轻量批量生成(适配当前固定规则)

利用数组的flatMap批量生成重复元素,再补入特殊值后排序即可,完全替代硬编码:

// 定义需要重复2次的时间区间
let repeatTwiceRange = Array(10...12) + Array(14...18)
// 每个元素重复2次后合并数组
let repeatedPart = repeatTwiceRange.flatMap { [$0, $0] }
// 补入仅出现1次的9、13,排序后得到最终数组
let hoursList = ([9, 13] + repeatedPart).sorted()

生成结果和你硬编码的hoursList完全一致,后续调整时间范围只要修改对应区间参数即可。

方案2:封装生成方法(适配规则可变动的场景)

如果后续重复规则可能调整,可以把逻辑封装成独立方法,修改逻辑更方便:

func generateHourList() -> [Int] {
    var list = [Int]()
    for hour in 9...18 {
        // 自定义重复规则:9和13仅出现1次,其余时间出现2次
        let repeatCount = (hour == 9 || hour == 13) ? 1 : 2
        list.append(contentsOf: Array(repeating: hour, count: repeatCount))
    }
    return list
}

// 调用直接生成目标数组
let hoursList = generateHourList()

额外注意点

你原代码中写的09本质是Int类型的9,如果需要展示为两位带前导零的格式,不需要修改数组存储逻辑,直接在Text中格式化输出即可:

Text("\(hours, format: .number.pad(toLength: 2, withPad: "0"))")
// 输出效果为 09、10,和你预期的展示效果一致

另外你的ForEach直接遍历Int数组需要指定id,否则会编译报错,修改为:

ForEach(viewModel.hoursList, id: \.self) { hours in

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:09:03