我想从字符串中删除第一个字符.到目前为止,我想到的最简洁的东西是:
display.text = display.text!.substringFromIndex(advance(display.text!.startIndex, 1))
我知道,由于Unicode,我们无法将Int
作为一个字符串的索引,但这个解决方案似乎非常冗长.还有别的我忽略的方法吗?
我想从字符串中删除第一个字符.到目前为止,我想到的最简洁的东西是:
display.text = display.text!.substringFromIndex(advance(display.text!.startIndex, 1))
我知道,由于Unicode,我们无法将Int
作为一个字符串的索引,但这个解决方案似乎非常冗长.还有别的我忽略的方法吗?
如果你用的是Swift 3,你可以忽略答案的第二部分.好消息是,这实际上又是简洁的了!只需使用String的新remove(at:)方法.
var myString = "Hello, World"
myString.remove(at: myString.startIndex)
myString // "ello, World"
我喜欢global dropFirst()
函数.
let original = "Hello" // Hello
let sliced = dropFirst(original) // ello
它简短、清晰,适用于任何符合切片协议的内容.
If you're using Swift 2,这个答案变了.您仍然可以使用dropFirst,但必须从strings characters
属性中删除第一个字符,然后将结果转换回字符串.dropFirst也成为了一种方法,而不是一个函数.
let original = "Hello" // Hello
let sliced = String(original.characters.dropFirst()) // ello
另一种 Select 是使用后缀函数拼接字符串的UTF16View
.当然,之后也必须将其转换回字符串.
let original = "Hello" // Hello
let sliced = String(suffix(original.utf16, original.utf16.count - 1)) // ello
所有这一切都意味着,我最初提供的解决方案在新版本的Swift中并不是最简洁的方式.如果你想找一个简单直观的解决方案,我建议你还是用removeAtIndex()
来解决@chris的问题.
var original = "Hello" // Hello
let removedChar = original.removeAtIndex(original.startIndex)
original // ello
正如@vacawama在下面的 comments 中指出的,另一个不修改原始字符串的选项是使用substringFromIndex.
let original = "Hello" // Hello
let substring = original.substringFromIndex(advance(original.startIndex, 1)) // ello
或者,如果您碰巧希望从字符串的开头和结尾删除一个字符,可以使用substringWithRange.当你startIndex + n > endIndex - m
岁的时候,一定要提防这种情况.
let original = "Hello" // Hello
let newStartIndex = advance(original.startIndex, 1)
let newEndIndex = advance(original.endIndex, -1)
let substring = original.substringWithRange(newStartIndex..<newEndIndex) // ell
最后一行也可以用下标符号来写.
let substring = original[newStartIndex..<newEndIndex]