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

时间:2017-09-28 10:49:03

标签: ios string substring swift4 xcode9.1

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

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

这是警告信息:

  不推荐使用

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

enter image description here

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

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

8 个答案:

答案 0 :(得分:243)

Swift 4引入了对字符串API的更改。
您可以使用!stringValue.isEmpty代替stringValue.characters.count > 0

有关详细信息,请从here

获取样本

例如

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

答案 1 :(得分:72)

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

答案 2 :(得分:8)

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

斯威夫特3:

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

Xcode 9.1错误消息:

  

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

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

只需删除字符 例如:

stringValue.characters.count 至 stringValue.count

答案 5 :(得分:1)

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

例如,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

答案 6 :(得分:1)

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

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

答案 7 :(得分:0)

您也可以将此代码用于字典分组,而无需使用{$ 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)