Swift 中的“init(validatingUTF8:)”警告

问题描述 投票:0回答:1

我正在使用一段 Swift 代码(来自这里),它采用

modelCode
并检查
modelMap
字典来获取模型。当模型是模拟器时,它检查模拟器的模型标识符。这是我的代码:

guard let mcode = modelCode, let map = String(validatingUTF8: mcode), let model = modelMap[map] else { return Model.unrecognized }
if model == .simulator {
    if let simModelCode = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] {
        if let simMap = String(validatingUTF8: simModelCode), let simModel = modelMap[simMap] {
            return simModel
        }
    }
}

编译器显示警告:

“init(validatingUTF8:)”已弃用:使用字符串参数的副本

如何解决此警告?

swift compiler-warnings
1个回答
0
投票

您看到的警告是因为

init(validatingUTF8:)
的方法
String
在较新版本的 Swift 中已被弃用。您可以直接使用
String
值,而不是使用此初始值设定项。

这是代码的重构版本,避免了已弃用的方法:

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
    }
}

在此版本中,我直接使用

mcode
simModelCode
作为从
modelMap
访问值的键,因为它们已经是
String
类型,从而消除了对已弃用的初始化程序的需要。这不仅解决了警告,还使代码变得更干净。

© www.soinside.com 2019 - 2024. All rights reserved.