我想从字符串中删除第一个字符.到目前为止,我想到的最简洁的东西是:

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]

Swift相关问答推荐

操作员如何点逻辑非(.!)在Swift工作?

RealityKit如何获得两个相对大小相同的ModelEntity?

.onReceive NSWindow.CloseNotify是否会为App中的每个窗口调用?

SwiftData:线程1:&Quot;NSFetchRequest找不到实体名称';提醒&q;的NSEntityDescription

从`compactMap()`闭包返回`nil`未通过结果类型判断

如何异步返回视图?什么?

如何将函数参数(字符串文字)标记为可本地化?

如何根据 DatePicker 中选定的日期实现 TabView 页面切换?

在 SwiftUI 中禁用 Select 器选项

如何制作进度加载动画?

在 struct 中的序列和非序列泛型函数之间进行 Select

如何测试可选 struct 的协议一致性

为 ObservedObject 和 State 对象配置预览

在视图中设置所有变量

如何在界面生成器中创建 UILayoutGuide?

Swift 中的 PageViewController 当前页面索引

iOS:检测设备是否为 iPhone X 系列(无框)

用 UIBezierPath 画一条线

'类 'className' 的 NSManagedObject 必须具有有效的 NSEntityDescription.错误

ld:入口点(_main)未定义.对于架构 x86_64:Xcode 9