173

characters - String 的实例属性,在Xcode 9.1中已弃用

使用该characters属性从 String 获取子字符串非常有用,但现在它已被弃用,Xcode 建议使用substring. 我试图检查 SO 问题和苹果开发人员教程/指南。但看不到任何建议的解决方案/替代方案。

这是警告信息:

'characters' 已弃用:请使用字符串或子字符串

在此处输入图像描述

我使用 property 执行/处理了很多字符串操作characters

有人对此更新有任何想法/信息吗?

4

8 回答 8

276

Swift 4 引入了对字符串 API 的更改。
你可以只使用!stringValue.isEmpty而不是stringValue.characters.count > 0

有关更多信息,您可以从此处获取示例

例如

let edit = "Summary"
edit.count   // 7
于 2017-09-28T10:54:26.090 回答
88

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
于 2017-11-08T11:11:42.093 回答
9

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

斯威夫特 3:

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

Xcode 9.1 错误信息:

'characters' 已弃用:请直接使用字符串或子字符串

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

斯威夫特 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(),比如countorso 这里是每个方法的明确的 Apple 文档。

删除()

删除最后一个()

计数字符

于 2017-11-07T19:17:57.973 回答
3

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

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

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

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

细绳

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

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

子串

使用 SubString 获取第一个字符。

let spstring = "Welcome"
let indexStartOfText = spstring.index(spstring.startIndex, offsetBy: 1)
let sub = spstring.substring(to: indexStartOfText)
print(sub) //W
于 2018-04-26T06:02:45.410 回答
2

只需删除字符例如:

stringValue.characters.count 到 stringValue.count

于 2020-02-02T14:31:23.953 回答
2

该警告只是冰山一角,有大量字符串更改,字符串再次是字符的集合,但我们得到了一些新的和很酷的东西,子字符串 :)

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

于 2017-11-03T14:40:51.030 回答
1

您也可以将此代码用于字典分组,而无需使用 { $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) { $0.first! }
print(groupedCities)
于 2018-08-16T11:55:34.467 回答
1
func validatePhoneNumber(number:String) -> Bool{
    if number.count < 10. //deprecated ->(number.characters.count)
    {
        return false;
    }else{
        return true;
    }
}

您直接使用 .count 并且不推荐使用字符。

于 2020-09-03T13:08:51.357 回答