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

