警告:'characters' 已弃用:请直接使用 String 或 Substring

warning: 'characters' is deprecated: Please use String or Substring directly

characters - an instance property of String, is deprecated from with

使用 characters 属性 从字符串中获取子字符串非常有用,但现在它已被弃用,Xcode 建议使用 substring。我已经尝试检查 SO 问题和 apple developer tutorials/guidelines 是否相同。但无法看到任何 solution/alternate 所建议的。

这是警告消息:

'characters' is deprecated: Please use String or Substring

我这么多字符串操作都是performed/handled使用属性characters.

有人 idea/info 了解此更新吗?

Swift 4 对字符串 API 进行了更改。
您可以只使用 !stringValue.isEmpty 而不是 stringValue.characters.count > 0

有关更多信息,您可以从 here

获取示例

例如

let edit = "Summary"
edit.count   // 7

那个警告只是冰山一角,有大量的字符串更改,字符串又是字符的集合,但是我们得到了一些新的很酷的东西,subStrings :)

这是一篇很好的读物: https://useyourloaf.com/blog/updating-strings-for-swift-4/

操作字符串的最常见情况之一是 JSON 响应。在这个例子中,我在我的手表应用程序中创建了一个扩展来删除比特币 JSON 对象的最后 (n) 个字符。

Swift 3:

func dropLast(_ n: Int = 0) -> String {
    return String(characters.dropLast(n))

Xcode 9.1 错误信息:

'characters' is deprecated: Please use String or Substring directly

Xcode是告诉我们直接使用字符串变量或方法.

Swift 4:

func dropLast(_ n: Int = 0) -> String {
    return String(dropLast(n))
    }

完整扩展:

extension String {
    func dropLast(_ n: Int = 0) -> String {
        return String(dropLast(n))
    }

    var dropLast: String {
        return dropLast()
    }
}

通话:

print("rate:\(response.USDRate)")
let literalMarketPrice = response.USDRate.dropLast(2)
print("literal market price: \(literalMarketPrice)")

控制台:

//rate:7,101.0888 //JSON float
//literal market price: 7,101.08 // JSON string literal

其他示例:

  • print("Spell has \(invisibleSpellName.count) characters.")
  • return String(dropLast(n))
  • return String(removeLast(n))

文档:

您将经常使用 dropLast()removeLast()count 等常用方法,因此这里是每个方法的明确 Apple 文档。

droplast()

removelast()

counting characters

Swift 4 对比 Swift 3 个示例:

let myString = "test"

for char in myString.characters {print(char) } // Swift 3
for char in myString { print(char) } // Swift 4

let length = myString.characters.count // Swift 3
let length = myString.count // Swift 4

使用这个 characters 因为 String 在 Swift 2.0 中不再是一个集合。然而,这仍然是 Swift 4 中的有效代码,但现在不再需要 String 再次成为 Collection

例如 Swift 4 String 现在有一个直接计数 属性 给出字符数:

// Swift 4
let spString = "Stack"
spString.count           // 5

字符串和子字符串的示例。

String

Swift 4 String现在直接获取给出String第一个字符的Element:(string.characters.first)

let spString = "Stack"
let firstElement = spString.first   //S

SubString

使用 SubString 获取第一个字符。

let spstring = "Welcome"
let indexStartOfText = spstring.index(spstring.startIndex, offsetBy: 1)
let sub = spstring.substring(to: indexStartOfText)
print(sub) //W

您也可以在不使用 { $0.characters.first! }.

let cities = ["Shanghai": 24_256_800, "Karachi": 23_500_000, "Beijing": 21_516_000, "Seoul": 9_995_000]
let groupedCities = Dictionary(grouping: cities.keys) { [=10=].first! }
print(groupedCities)

只删除字符 例如:

stringValue.characters.count 到 stringValue.count

func validatePhoneNumber(number:String) -> Bool{
    if number.count < 10. //deprecated ->(number.characters.count)
    {
        return false;
    }else{
        return true;
    }
}

您直接使用 .count 并且字符已弃用。