Swift 中出现“init(validatingUTF8:)”警告

Warning with 'init(validatingUTF8:)' in Swift

提问人:FrugalResolution 提问时间:10/25/2023 最后编辑:FrugalResolution 更新时间:10/25/2023 访问量:43

问:

我正在使用一段 Swift 代码(从这里开始),该代码需要 a 并检查字典以获取模型。当模型是模拟器时,它会检查模拟器的模型标识符。这是我的代码:modelCodemodelMap

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 参数的副本

Deprecation info in documentation

如何解决此警告?

Swift 编译器警告

评论


答:

0赞 FrugalResolution 10/25/2023 #1

您看到的警告是因为 的方法已在较新版本的 Swift 中弃用。您可以直接使用该值,而不是使用此初始值设定项。init(validatingUTF8:)StringString

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

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

在此修订版中,我直接使用 和 作为键来访问值,因为它们已经是 类型,从而消除了对已弃用的初始值设定项的需求。这不仅解决了警告,还使代码更简洁一些。mcodesimModelCodemodelMapString

评论

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 中的文档也说已弃用,所以我想这是您应该首先查看的地方。