【问题标题】:String basics with SwiftSwift 的字符串基础知识
【发布时间】:2017-09-22 16:53:01
【问题描述】:

只是试图从 Swift 中的字符串中删除第一个字符。我使用下面编写的代码,但第二行不断使我的应用程序崩溃。

这不是解开字符串索引的正确方法吗?是什么?

var tempText = text
let toRemove = tempText?.startIndex ?? String.Index(0)
tempText?.remove(at: toRemove)

【问题讨论】:

标签: swift string swift3


【解决方案1】:

可以使用 Collection 方法 dropFirst:

if let text = text { // you need also to unwrap your optional
    let tempText = String(text.characters.dropFirst())  // And initialize a new String with your CharacterView
}

在 Swift 4 中,String 符合 Collection,因此您可以直接在您的字符串上使用它:

if let text = text {
    let tempText = text.dropFirst()  // "bc"
}

【讨论】:

    【解决方案2】:

    您正在初始化 String.Index 类型,而不是获取 tempText 字符串的索引。

    此外,startIndex 不是可选的,但tempText 是可选的。

    您应该检查tempText 是否存在且不为空(您可以简单地使用if let 执行此操作),如果符合这些条件,则删除startIndex 处的字符。

    var tempText = text
    
    if let toRemove = tempText?.startIndex {
        tempText?.remove(at: toRemove)
    }
    

    【讨论】:

    • 谢谢,这完美地清理了它。现在很明显,你解释了 facepalm
    • 天哪,所有展开的力量是怎么回事?您已经有一个 if 语句,只需将其更改为条件绑定即可。
    • @the4kman 真的吗? tempText = tempText?.characters.dropFirst().map(String.init) ?? tempText
    • @the4kman 当然可以,但是您可以解开字符串索引,而无需强制解开其他所有内容..
    【解决方案3】:

    如果你使用的是 swift 4,你可以使用:

    var tempText = text.dropFirst()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 2018-05-25
      • 2014-11-28
      • 2014-02-14
      • 2023-04-10
      • 1970-01-01
      相关资源
      最近更新 更多