警告:'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 文档。
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 并且字符已弃用。
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 文档。
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 并且字符已弃用。