characters - String的实例属性,不推荐使用Xcode 9.1
使用characters
属性从String获取子字符串非常有用,但现在它已被弃用,Xcode建议使用substring
。我试图检查SO问题和苹果开发人员教程/指南。但无法按照建议看到任何解决方案/备用方案。
这是警告信息:
不推荐使用'characters':请使用字符串或子字符串
我使用属性characters
执行/处理了很多字符串操作。
任何人对此更新有任何想法/信息?
答案 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文档。
答案 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)