我正在使用一段 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:)”已弃用:使用字符串参数的副本
如何解决此警告?
您看到的警告是因为
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
类型,从而消除了对已弃用的初始化程序的需要。这不仅解决了警告,还使代码变得更干净。