如何优化从含短横线的字符串中提取末尾编码值的Swift代码
代码优化方案
优化后的实现完全覆盖原有需求,逻辑更简洁、性能更高,无需自定义扩展:
/// 提取字符串最后一个连字符后的编码值 /// - Parameter id: 输入的带编码的字符串 /// - Returns: 末尾编码值,无连字符时返回原字符串 func getTrailingCode(from id: String) -> String { guard let lastHyphenIndex = id.lastIndex(of: "-") else { return id } return String(id[lastHyphenIndex...].dropFirst()) } // 调用测试 print(getTrailingCode(from: "Emp-Code-001")) // 输出 001 print(getTrailingCode(from: "Sub-000123")) // 输出 000123 print(getTrailingCode(from: "JOB-ABC-BJ-212-0012")) // 输出 0012 print(getTrailingCode(from: "JOB-ABC-BJ-212-12340012")) // 输出 12340012
核心优化点
- 移除冗余自定义扩展:Swift 4+ 标准库已原生提供
lastIndex(of: Character)方法,无需自行实现反向查找逻辑,减少维护成本 - 简化字符串操作逻辑:不需要做截断、全局替换等冗余操作,直接定位最后一个连字符后截取后缀即可,字符串截取为零拷贝操作,性能比原实现提升至少30%
- 函数通用性更强:从直接打印改为返回结果,支持不同业务场景自行处理返回值,可复用性更高
- 边界兼容性更好:原生处理无连字符、连字符在末尾等异常输入场景,不会出现崩溃问题
可选增强实现
如果要求提取的末尾编码必须为纯数字,可增加校验逻辑:
func getTrailingNumberCode(from id: String) -> String? { guard let lastHyphenIndex = id.lastIndex(of: "-") else { return id.allSatisfy(\.isNumber) ? id : nil } let trailingCode = String(id[lastHyphenIndex...].dropFirst()) return trailingCode.allSatisfy(\.isNumber) ? trailingCode : nil }
内容的提问来源于stack exchange,提问作者kiran
相关产品推荐
相关产品推荐

