我有一个字符串“000”。我想将其更改为“0.00”。
我看了一下插入功能。
var str = "000"
str.insert(".", at: str.endIndex)
如何在结束索引之前获得2的索引?
我试过了:
str.insert(".", at: str.endIndex - 1)
但这根本不起作用。
答案 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
时,下次您会感觉一切顺利。
试试看,看看是否有帮助!