在 Swift 中删除字符串中第一个字符的最简洁方法是什么?

2024-05-26

我想删除字符串中的第一个字符。到目前为止,我想到的最简洁的事情是:

display.text = display.text!.substringFromIndex(advance(display.text!.startIndex, 1))

我知道我们不能用Int因为 Unicode,但这个解决方案看起来非常冗长。还有我忽略的另一种方式吗?


如果您正在使用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]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Swift 中删除字符串中第一个字符的最简洁方法是什么? 的相关文章

随机推荐

  • 如何在Shiny中动态生成的条件面板中格式化条件?

    我正在尝试使用 for 循环在 Shiny 中创建小部件 每个块包含 label 复选框 选择选择器 两个数字输入 我想根据复选框的值和选择选择器的值来设置显示或隐藏两个数字输入的条件 在我创建的 for 循环中 我为每个小部件变量添加了一
  • LINQ 中的延迟执行有什么好处?

    LINQ 使用延迟执行模型 这意味着在调用 Linq 运算符时不会返回结果序列 而是这些运算符返回一个对象 然后仅当我们枚举该对象时 该对象才会生成序列的元素 虽然我了解延迟查询的工作原理 但我在理解延迟执行的好处时遇到了一些困难 1 我读
  • 如何在 YAML 中阻止注释?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 如何在 YAML 中注释一行行 YAML 支持内联注释 但不支持块注释 From 维基百
  • Haskell 中多核编程的现状如何?

    Haskell 中多核编程的现状如何 现在有哪些项目 工具和库可用 有哪些经验报道 2009年至2012年期间 发生了以下事件 2012 从 2012 年开始 并行 Haskell 状态更新开始出现在并行 Haskell 摘要 http w
  • 2 个单词之间有空格 CSS

    我想在 css 中的 2 个单词之间添加一个空格 例如 1 RUNNING DAYS email protected cdn cgi l email protection 在 HTML 中有 nbsp nbsp但使用不正确 nbsp我认为
  • 使用网络计算机进行 Matlab 并行处理

    我熟悉matlabpool and parfor用法 但我仍然需要加快计算速度 我的 1GB 网络中有一台功能更强大的计算机 两台计算机都有 R2010b 并且具有相同的代码和路径 使用两台计算机进行并行计算的最简单方法是什么 我今天使用的
  • 通过 TCP/.NET SSLStream 发送文件很慢/无法正常工作

    我正在编写一个与 SSL 配合使用的服务器 客户端应用程序 通过SSLStream 它必须做很多事情 不仅仅是文件接收 发送 目前 它的工作原理是 只有一个连接 我总是使用从客户端 服务器发送数据SSLStream WriteLine 并使
  • Debug.WriteLine() 未命中

    我正在调试 Windows 服务 通过点击F5在 Visual Studio 2010 中 使用以下代码 In 程序 cs file static void Main if Environment UserInteractive We ar
  • 在 Tomcat 中触发内部 ServletRequest

    我正在使用 Quartz 来安排 Web 应用程序的后台任务 其中一些任务只是针对同一 Web 应用程序发出请求 我想避免依赖于任何类型的网络设置 例如 如果从数据中心内发出带有我自己域名的请求 则可能无法正确路由 是否有一个 Java A
  • Android 浏览器缩放?

    我正在尝试为 Android 创建一个移动网站 当我将主体宽度设置为 480px 屏幕宽度 时 结果比我预期的大 50 左右 看来 android 正在缩放它所绘制的内容并弄乱了我所有的布局 有谁知道如何禁用它或解决它 我已经在使用这个 您
  • 没有数据库的 django 单元测试

    是否有可能在不设置数据库的情况下编写 django 单元测试 我想测试不需要数据库设置的业务逻辑 虽然设置数据库很快 但在某些情况下我真的不需要它 您可以子类化 DjangoTestSuiteRunner 并重写 setup databas
  • 在 PHP 扩展中,推荐从 std::string 返回值的方法

    我们有一个简单的 PHP 函数 其目的是调用 C 自由函数std string callLibrary std string 并返回其std string返回值 目前看起来是这样的 PHP FUNCTION call library cha
  • 如何让BackgroundWorker返回一个对象

    我需要做RunWorkerAsync 返回一个List
  • Python 的最佳实践:assert command() == False [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • innerHTML 未写入 svg 组 Firefox 和 IE

    我正在做一个项目 遇到了障碍 在 Chrome 中 它按预期工作 但在 Firefox 和 IE 中则不然 下面的代码实际上只是真实项目代码的非常简化的版本 基本上我正在尝试替换 svg 的每组中的圆圈 因此 我从预编码的圆圈开始 然后删除
  • FROM 子句中子查询末尾随机字母的含义 - SQL

    我终于成功将两个sql sum查询的结果求和了 这家伙迈出了一小步 我的问题与代码中的最后一个字符 Z 有关 SELECT SUM hr FROM SELECT SUM amount AS hr FROM Try again dbo tue
  • 仅底部的框阴影

    我有一盒内容 需要为其提供阴影 但我只想为盒子的底部提供阴影 我用过这个css box shadow 0 3px 5px 000000 如果我给出这个代码 它会显示左 右和底部 我只需要底部 任何人都可以建议解决这个问题吗 多谢 添加类后您
  • Oracle SQL 查询日期格式

    我总是对 ORACLE SQL 查询中的日期格式感到困惑 并花几分钟时间去谷歌 有人可以向我解释当数据库表中有不同格式的日期时解决问题的最简单方法吗 例如 我有一个日期列为 ES DATE 保存的数据为 27 APR 12 11 52 48
  • 如何在 sed 中用“pwd”的结果替换令牌?

    我正在尝试做这样的事情 sed s REPLACE WITH PATH pwd 不幸的是 我出错了 sed e expression 1 char 23 unknown option to s 为什么会发生这种情况 您需要使用不同的字符而不
  • 在 Swift 中删除字符串中第一个字符的最简洁方法是什么?

    我想删除字符串中的第一个字符 到目前为止 我想到的最简洁的事情是 display text display text substringFromIndex advance display text startIndex 1 我知道我们不能用