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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:54:00