我想用类似的东西 arrayString[firstString][index] = "1"
但这会导致: 无法通过下标赋值:下标只能获取
并解释为什么下面的代码 var arrayString: [String] = struct.strings
不允许 首先比较[index] == "0" 所以我需要使用 var arrayString = struct.strings
根据您需要执行此操作的次数,最好从字符串创建一个字符数组,并为其建立索引。
您可以只对您关心的字符串执行此操作:
let strings = ["abcdefg", "123", "qwerty"]
let characters = Array(strings[1].characters) // => ["1", "2", "3"]
print(characters[0]) // => "1"
或者,如果您要对所有字符串进行大量访问,您可以提前将所有字符串转换为
[Character]
,如下所示:
let strings = ["abcdefg", "123", "qwerty"]
let stringCharacters = strings.map { Array(string.characters) }
/* [
["a", "b", "c", "d", "e", "f", "g"],
["1", "2", "3"],
["q", "w", "e", "r", "t", "y"]
] */
print(characters[1][0]) // => "1"
如果您想进行更改,只需将字符数组转换回字符串,然后将其分配到您想要的任何位置即可:
var strings = ["abcdefg", "123", "qwerty"]
var characters = Array(strings[1].characters) // => ["1", "2", "3"]
characters[0] = "0"
strings[1] = String(characters)
print(strings) // => ["abcdefg", "023", "qwerty"]
此外,这里有一个方便的扩展,我用它来改变字符串的许多字符:
extension String {
mutating func modifyCharacters(_ closure: (inout [Character]) -> Void) {
var characterArray = Array(self.characters)
closure(&characterArray)
self = String(characterArray)
}
}
var string = "abcdef"
string.modifyCharacters {
$0[0] = "1"
$0[1] = "2"
$0[2] = "3"
}
print(string)