如果您正在使用Swift 3,你可以忽略这个答案的第二部分。好消息是,这实际上又变得简洁了!只需使用 String 的新的 remove(at:) 方法即可。
var 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]