我要删除字符串中的第一个字符。到目前为止,我提出的最简洁的事情是:
display.text = display.text!.substringFromIndex(advance(display.text!.startIndex,1))
我知道我们不能索引到一个Int,因为Unicode的字符串,但这个解决方案似乎非常冗长。有没有另一种方式,我忽略?
如果你使用Swift 3,你可以忽略这个答案的第二部分。好消息是,这现在实际上简洁了!只需使用String的新的remove(at :)方法。
原文链接:https://www.f2er.com/swift/321322.htmlvar myString = "Hello,World" myString.remove(at: myString.startIndex) myString // "ello,World"
我喜欢这个全局dropFirst()函数。
let original = "Hello" // Hello let sliced = dropFirst(original) // ello
它很短,清晰,适用于符合Sliceable协议的任何东西。
如果你使用Swift 2,这个答案已经改变。您仍然可以使用dropFirst,但不能从字符串characters属性中删除第一个字符,然后将结果转换回字符串。 dropFirst也成为一个方法,而不是一个函数。
let original = "Hello" // Hello let sliced = String(original.characters.dropFirst()) // ello
另一个选择是使用后缀函数来拼接字符串的UTF16View。当然,这也必须转换回一个字符串之后,以及。
let original = "Hello" // Hello let sliced = String(suffix(original.utf16,original.utf16.count - 1)) // ello
所有这一切都是说,我最初提供的解决方案已经证明不是在Swift的较新版本中这样做的最简洁的方法。我建议回到@chris的解决方案使用removeAtIndex()如果你正在寻找一个简短和直观的解决方案。
var original = "Hello" // Hello let removedChar = original.removeAtIndex(original.startIndex) original // ello
正如@vacawama在下面的注释中指出的,不修改原始字符串的另一个选项是使用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]