gpt4 book ai didi

ios - `UTF16Index()` 或 `UTF16Index.init(encodedOffset:)` 用于 Xcode 8/9 支持

转载 作者:搜寻专家 更新时间:2023-10-31 22:05:00 25 4
gpt4 key购买 nike

我所在的开发团队同时支持 Xcode 8 和 Xcode 9。

我正在开发一个在 Xcode 8 中使用 String.UTF16Index(range.location) 的功能。当我升级到 Xcode 9 时,导致错误 'init' is deprecated.

所以在 Xcode 9 中我将其更改为 UTF16Index.init(encodedOffset: range.lowerBound)。但是,现在这在 Xcode 8 中不起作用,出现错误 Argument labels '(encodedOffset:)' do not match any available overloads

即使我可以检查 Xcode 版本并编写不同的代码,其中一行也会在编译时失败。我该如何管理?还是我一直在等待,直到我们完全迁移到 Xcode 9?

最佳答案

来自 Version Compatibility在 Swift 文档中:

NOTE

When the Swift 4 compiler is working with Swift 3 code, it identifies its language version as 3.2. As a result, you can use conditional compilation blocks like #if swift(>=3.2) to write code that’s compatible with multiple versions of the Swift compiler.

在你的情况下是

#if swift(>=3.2)
let idx = String.UTF16Index(encodedOffset: range.lowerBound)
#else
let idx = String.UTF16Index(range.location)
#endif

在 Xcode 9(Swift 4 或 Swift 3.2 模式)中只编译第一行,在 Xcode 8 (Swift 3.1) 中只编译了第二行。

更新 encodedOffset的使用是considered harmful将是 deprecated在 Swift 5 中。从 Swift 4 开始,转换 NSRange 的正确方法到 Range<String.Index>

let str = "abc"
let nsRange = NSRange(location: 2, length: 1)
let sRange = Range(nsRange, in: str)

关于ios - `UTF16Index()` 或 `UTF16Index.init(encodedOffset:)` 用于 Xcode 8/9 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46455073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com