Swift 5:字符串中字符的索引
Swift 5: Index of a Character in String
在 Swift 5 之前,我有这个扩展工作:
fileprivate extension String {
func indexOf(char: Character) -> Int? {
return firstIndex(of: char)?.encodedOffset
}
}
现在,我收到一条已弃用的消息:
'encodedOffset' is deprecated: encodedOffset has been deprecated as most common usage is incorrect. Use `utf16Offset(in:)` to achieve the same behavior.
有没有比使用 utf16Offset(in:)
更简单的解决方案?
我只需要作为 Int 返回的字符位置的索引。
一段时间后我不得不承认我原来的答案是错误的。
在Swift中有两种方法:firstIndex(of:)
and lastIndex(of:)
两个returns Int?
表示first/last元素在Array
中的索引等于传递的元素(如果有的话,否则returns nil
).
因此,您应该避免使用自定义方法来获取索引,因为可能有两个相同的元素,您不知道需要哪个索引。因此,请尝试考虑您的使用情况并确定哪个索引更适合您;首先或最后。
原回答:
utf16Offset(in:)
有什么问题?这是 Swift 5
的方法
fileprivate extension String {
func indexOf(char: Character) -> Int? {
return firstIndex(of: char)?.utf16Offset(in: self)
}
}
在 Swift 5 之前,我有这个扩展工作:
fileprivate extension String {
func indexOf(char: Character) -> Int? {
return firstIndex(of: char)?.encodedOffset
}
}
现在,我收到一条已弃用的消息:
'encodedOffset' is deprecated: encodedOffset has been deprecated as most common usage is incorrect. Use `utf16Offset(in:)` to achieve the same behavior.
有没有比使用 utf16Offset(in:)
更简单的解决方案?
我只需要作为 Int 返回的字符位置的索引。
一段时间后我不得不承认我原来的答案是错误的。
在Swift中有两种方法:firstIndex(of:)
and lastIndex(of:)
两个returns Int?
表示first/last元素在Array
中的索引等于传递的元素(如果有的话,否则returns nil
).
因此,您应该避免使用自定义方法来获取索引,因为可能有两个相同的元素,您不知道需要哪个索引。因此,请尝试考虑您的使用情况并确定哪个索引更适合您;首先或最后。
原回答:
utf16Offset(in:)
有什么问题?这是 Swift 5
fileprivate extension String {
func indexOf(char: Character) -> Int? {
return firstIndex(of: char)?.utf16Offset(in: self)
}
}