iOS 13.0中scanDouble已被弃用,如何修复对应编译警告?
scanDouble弃用问题修复方案
Apple从iOS 13开始对Scanner的API做了Swift友好型重构,废弃了所有需要传入指针的scan*方法,替换为返回可选值的安全版本,你可以根据自己的最低兼容版本选择对应解决方案:
方案1:最低支持版本 ≥ iOS 13
直接替换为新版API即可,无需处理指针,写法更安全:
let fromStr = (group as NSString).substring(with: from.range) var scanner = Scanner(string: fromStr) // 新API返回Double?,解析成功返回对应值,失败返回nil if let scannedValue = scanner.scanDouble() { h = scannedValue } else { // 解析失败兜底逻辑,可按需调整 h = 0.0 }方案2:需要兼容iOS 13以下版本
用版本判断同时兼容新旧API,不会触发警告也能覆盖旧版本用户:
let fromStr = (group as NSString).substring(with: from.range) var scanner = Scanner(string: fromStr) if #available(iOS 13.0, *) { if let scannedValue = scanner.scanDouble() { h = scannedValue } else { h = 0.0 } } else { // 旧版本继续使用原有API scanner.scanDouble(&h) }方案3:无需Scanner特性的轻量替代
如果你只是需要简单把字符串转Double,不需要Scanner的逐位扫描能力,可以直接用
Double的原生构造器,兼容所有iOS版本,逻辑更简洁:let fromStr = (group as NSString).substring(with: from.range) if let convertedValue = Double(fromStr) { h = convertedValue } else { h = 0.0 }
内容的提问来源于stack exchange,提问作者Kex
相关产品推荐
相关产品推荐

