如何在 Swift 中获取和设置特定索引处的字符串字符

问题描述 投票:0回答:1

我想用类似的东西 arrayString[firstString][index] = "1"

但这会导致: 无法通过下标赋值:下标只能获取

并解释为什么下面的代码 var arrayString: [String] = struct.strings

不允许 首先比较[index] == "0" 所以我需要使用 var arrayString = struct.strings

arrays swift string character
1个回答
1
投票

根据您需要执行此操作的次数,最好从字符串创建一个字符数组,并为其建立索引。

您可以只对您关心的字符串执行此操作:

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)
© www.soinside.com 2019 - 2024. All rights reserved.