警告:不推荐使用“字符”:请直接使用字符串或子字符串
Posted
技术标签:
【中文标题】警告:不推荐使用“字符”:请直接使用字符串或子字符串【英文标题】:warning: 'characters' is deprecated: Please use String or Substring directly 【发布时间】:2018-03-10 02:05:56 【问题描述】:characters - String 的实例属性,已弃用 Xcode 9.1
使用characters
属性从String 中获取子字符串非常有用,但现在它已被弃用,Xcode 建议使用substring
。我试图检查 SO 问题和苹果开发人员教程/指南。但看不到任何建议的解决方案/替代方案。
这里是警告信息:
'characters' 已弃用:请使用字符串或子字符串
我已经使用属性characters
执行/处理了很多字符串操作。
有人对此更新有任何想法/信息吗?
【问题讨论】:
这里是 interesting article 关于String
从 Swift 3 到 4 的更改,另请阅读 SE0163
尝试改用count
。
如果你使用的是string.characters.forEach
,那么新的API就是string.forEach char in process(char)
【参考方案1】:
Swift 4 引入了对字符串 API 的更改。
您可以只使用!stringValue.isEmpty
而不是stringValue.characters.count > 0
有关更多信息,您可以从here获取样本
例如
let edit = "Summary"
edit.count // 7
【讨论】:
感谢您的回答.. 但是我可以有子字符串的详细参考。这只是示例示例,我还有很多其他处理字符的操作 请从这里查看详细信息。 developer.apple.com/library/content/documentation/Swift/… let greeting = "Hello, world!"让 index = greeting.index(of: ",") ?? greeting.endIndex 让开始 = greeting[..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
【讨论】:
这应该是公认的答案。问题是关于 string.characters.count 的替换,而不是与零比较的替换;仅在屏幕截图中提及。【参考方案3】:处理字符串的最常见情况之一是使用 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()
或 count
,因此这里是每种方法的明确 Apple 文档。
droplast()
removelast()
counting characters
【讨论】:
【参考方案4】:使用这个characters
,因为String
在 Swift 2.0 中不再是一个集合。然而,这在 Swift 4 中仍然是有效的代码,但现在不再需要 String
再次成为 Collection
。
例如,Swift 4 String
现在有一个直接计数属性,可以提供字符计数:
// Swift 4
let spString = "Stack"
spString.count // 5
字符串和子字符串的示例。
字符串
Swift 4 String
现在直接获取给出字符串第一个字符的元素:(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
【讨论】:
我想获取字符串的第一个字符,所以我想知道我应该使用哪种方式 let firstElement = spString.first 或 Substring? @Pulkit 最好使用.first
,因为如果字符串为""
为空。它只会返回 nil 但substring
会产生错误。
如何将这行代码转换为swift 4 'AuthorImageText = String(val.characters[(AuthorName.startIndex)]).capitalized'
@Pulkit 只需删除 .characters
就够了【参考方案5】:
该警告只是冰山一角,字符串发生了很多变化,字符串又是字符的集合,但我们得到了一些新的和酷的东西,subStrings :)
这是一篇很棒的文章: https://useyourloaf.com/blog/updating-strings-for-swift-4/
【讨论】:
【参考方案6】:只需删除字符 例如:
stringValue.characters.count 到 stringValue.count
【讨论】:
【参考方案7】:您也可以使用此代码进行字典分组,而无需使用 $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)
【讨论】:
【参考方案8】:func validatePhoneNumber(number:String) -> Bool
if number.count < 10. //deprecated ->(number.characters.count)
return false;
else
return true;
您直接使用 .count 并且不推荐使用字符。
【讨论】:
以上是关于警告:不推荐使用“字符”:请直接使用字符串或子字符串的主要内容,如果未能解决你的问题,请参考以下文章
Swift 4:不推荐使用 substring(with:)':请使用字符串切片下标 [重复]
C++ 警告:不推荐使用从字符串常量到“char*”的转换 [-Wwrite-strings]
为啥在一种情况下会收到带有字符串文字的不推荐使用的转换警告,而在另一种情况下却没有?