在String中插入一个字符(Swift)

时间:2017-07-08 15:11:22

标签: swift string

我有一个字符串“000”。我想将其更改为“0.00”。

我看了一下插入功能。

var str = "000"
str.insert(".", at: str.endIndex)

如何在结束索引之前获得2的索引?

我试过了:

str.insert(".", at: str.endIndex - 1)

但这根本不起作用。

2 个答案:

答案 0 :(得分:1)

您还可以使用String s character属性。它基本上是一个由String中所有字符(duh)组成的数组。

所以你会:

var str = "000"

let index = str.characters.index(str.characters.startIndex, offsetBy: 1)  //here you define a place (index) to insert at
str.characters.insert(".", at: index)  //and here you insert

不幸的是,您必须先创建index,因为.insert不允许您使用Int指定位置。

答案 1 :(得分:0)

从 Swift 2 开始,String 不再符合 SequenceType。换句话说,您不能使用 for...in 循环遍历字符串。

简单易行的方法是将 String 转换为 Array 以获得索引的好处,就像这样:

let input = Array(str)

我记得当我试图在不使用任何转换的情况下索引到 String 时。我真的很沮丧,我无法想出或达到想要的结果,并准备放弃。 但我最终创建了自己的解决方案,这是扩展的完整代码:

extension String {
    subscript (_ index: Int) -> String {
    
        get {
             String(self[self.index(startIndex, offsetBy: index)])
        }
    
        set {
            if index >= count {
                insert(Character(newValue), at: self.index(self.startIndex, offsetBy: count))
            } else {
                insert(Character(newValue), at: self.index(self.startIndex, offsetBy: index))
            }
        }
    }
}

现在您可以使用字符串的索引从字符串中读取和写入单个字符,就像您最初想要的那样:

var str = "car"
car[3] = "d"
print(str)

使用它并通过 Swift 的 String 访问模型是一种简单而有用的方法。 现在,当您可以按原样循环遍历字符串而不是将其转换为 Array 时,下次您会感觉一切顺利。

试试看,看看是否有帮助!