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

SwiftUI 5.5 如何分割竖线分隔字符串替换NamedWeek数组对应字段

实现NamedWeek数组批量替换业务数据的方案

基础实现

直接分割字符串后按下标批量替换,适合单次使用场景:

// 1. 分割两个|拼接的业务字符串为数组
let ddArray = string1.components(separatedBy: "|")
let readArray = string2.components(separatedBy: "|")

// 2. 安全校验:避免分割后数组长度不匹配导致的越界崩溃
guard ddArray.count == namedWeeks.count, readArray.count == namedWeeks.count else {
    // 可根据业务需求调整错误处理逻辑,比如填充默认值、抛业务错误等
    fatalError("业务数据长度与星期数组长度不匹配")
}

// 3. 遍历下标逐个替换对应位置的字段值
for index in namedWeeks.indices {
    namedWeeks[index].wDD = ddArray[index]
    namedWeeks[index].wRead = readArray[index]
}

封装为复用方法

如果多个地方需要用到替换逻辑,可以封装为数组扩展方法,降低重复代码:

// 扩展NamedWeek类型的数组,新增批量更新方法
extension Array where Element == NamedWeek {
    mutating func updateBusinessData(ddString: String, readString: String) throws {
        let ddArray = ddString.components(separatedBy: "|")
        let readArray = readString.components(separatedBy: "|")
        
        // 长度校验不通过则抛出错误
        guard ddArray.count == self.count, readArray.count == self.count else {
            throw NSError(domain: "WeekDataError", code: 1001, userInfo: [
                NSLocalizedDescriptionKey: "传入的业务数据长度不匹配"
            ])
        }
        
        // 批量更新字段
        for index in self.indices {
            self[index].wDD = ddArray[index]
            self[index].wRead = readArray[index]
        }
    }
}

// 调用示例
do {
    try namedWeeks.updateBusinessData(ddString: string1, readString: string2)
} catch {
    print("数据更新失败:\(error.localizedDescription)")
}

注意事项

  • 必须做好长度校验,直接访问不确定存在的数组下标会触发崩溃
  • 如果业务允许部分数据缺失,可以修改遍历逻辑为取两个数组的最小长度作为遍历上限,缺失字段可以保留原有示例值或者填充自定义占位符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:54:01