Swift中'init(validatingUTF8:)'已弃用警告的解决方法
解决Swift中
String(validatingUTF8:)弃用警告的方案 问题原因
编译器提示的警告源于String(validatingUTF8:)初始化器在新版本Swift中被弃用:当传入参数本身已是String类型时,该初始化器完全多余——Swift的String原生保证合法UTF-8编码,无需额外验证。
解决方案
根据modelCode的实际类型,选择对应修改方式:
情况1:modelCode为String?类型
直接移除String(validatingUTF8:)调用,使用参数本身即可:
guard let mcode = modelCode, let model = modelMap[mcode] else { return Model.unrecognized } if model == .simulator { if let simModelCode = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"], let simModel = modelMap[simModelCode] { return simModel } }
情况2:modelCode为UnsafePointer<CChar>?类型(从C API获取的原始指针)
改用String(cString:)初始化器安全转换C字符串:
guard let mcode = modelCode, let map = String(cString: mcode), let model = modelMap[map] else { return Model.unrecognized } if model == .simulator { if let simModelCode = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"], let simModel = modelMap[simModelCode] { return simModel } }
说明
两种修改方式均能消除警告,且完全保留原代码的业务逻辑。若代码从旧版本Swift迁移而来,优先确认modelCode的实际类型后选择对应方案即可。
内容的提问来源于stack exchange,提问作者FrugalResolution
相关产品推荐
相关产品推荐

