警告:不推荐使用'characters':请直接使用String或Substring

ios string substring swift4 xcode9.1

49060 观看

7回复

40574 作者的声誉

字符 - String的实例属性,不推荐使用Xcode 9.1

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

这是警告信息:

不推荐使用'characters':请使用String或Substring

在此输入图像描述

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

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

作者: Krunal 的来源 发布者: 2017 年 9 月 28 日

回应 (7)


238

2589 作者的声誉

决定

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

有关更多信息,请从此处获取样本

例如

let edit = "Summary"
edit.count   // 7
作者: songxunzhao 发布者: 28.09.2017 10:54

2

89 作者的声誉

那个警告只是冰山一角,有一堆字符串变化,字符串又是一组字符,但我们得到了新的和酷的,subStrings :)

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

作者: Boris 发布者: 03.11.2017 02:40

7

8259 作者的声誉

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

斯威夫特3:

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

Xcode 9.1错误消息:

不推荐使用'characters':请直接使用String或Substring

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()count因此这里是每种方法的明确的苹果文档。

droplast()

removelast()

计算字符

作者: tymac 发布者: 07.11.2017 07:17

69

2804 作者的声誉

Swift 4 vs 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
作者: Mohammad Sadegh Panadgoo 发布者: 08.11.2017 11:11

1

790 作者的声誉

使用它,characters因为String停止在Swift 2.0中成为集合。然而,这仍是斯威夫特4有效代码,但不再是必要的,现在StringCollection试。

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

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

String和SubString的示例。

Swift 4 String现在直接获取给出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
作者: Pranavan Sp 发布者: 26.04.2018 06:02

0

16 作者的声誉

您也可以使用此代码进行字典分组,而无需使用{$ 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)
作者: mahendra solanki 发布者: 16.08.2018 11:55

0

3 作者的声誉

该怎么办?'characters'已弃用:请直接使用String或Substring?

static func typeForCardNumber(_ cardNumber:String) - > CardType?{

    guard let first = cardNumber.characters.first else { return nil }

    switch first {
    case "4": return .visa
    case "5": return .masterCard

    default: return nil
    }
}
作者: Ranjith iOS 发布者: 12.03.2019 10:18
32x32