提问人:FrugalResolution 提问时间:10/25/2023 最后编辑:FrugalResolution 更新时间:10/25/2023 访问量:43
Swift 中出现“init(validatingUTF8:)”警告
Warning with 'init(validatingUTF8:)' in Swift
问:
我正在使用一段 Swift 代码(从这里开始),该代码需要 a 并检查字典以获取模型。当模型是模拟器时,它会检查模拟器的模型标识符。这是我的代码: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:)”已弃用:使用 String 参数的副本
如何解决此警告?
答:
0赞
FrugalResolution
10/25/2023
#1
您看到的警告是因为 的方法已在较新版本的 Swift 中弃用。您可以直接使用该值,而不是使用此初始值设定项。init(validatingUTF8:)
String
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
评论
0赞
Joakim Danielson
10/25/2023
奇怪的是,文档中没有提到该方法被弃用。编辑:如果我从文档中获取示例代码并在 Xcode 15 playground 中运行它,我不会收到任何关于它被弃用的警告。
0赞
FrugalResolution
10/25/2023
感谢您指出这一点。我将弃用信息作为 Swift.String 框架的图像添加到问题中,但您是对的,Web 文档中没有弃用信息。
1赞
HangarRash
10/25/2023
@JoakimDanielson 看 developer.apple.com/documentation/swift/string/...
0赞
Joakim Danielson
10/25/2023
@HangarRash谢谢,这太令人困惑了:)我看到 Xcode 中的文档也说已弃用,所以我想这是您应该首先查看的地方。
评论