【问题标题】:How to Get and Set a string's character at a specific index in Swift如何在 Swift 中的特定索引处获取和设置字符串的字符
【发布时间】:2017-04-09 16:32:05
【问题描述】:

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

但这会导致: 不能通过下标赋值:下标是只能获取的

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

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

【问题讨论】:

标签: arrays swift string character


【解决方案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)

【讨论】:

  • Thks 我只是在编写代码,担心我无法以其他方式进行。只是不太相信为什么我不能像其他语言一样访问和更改特定索引...
  • @LayonTavares 因为与大多数语言不同,Swift 的String 严格地正确且安全地支持Unicode。阅读本文了解更多信息:developer.apple.com/library/content/documentation/Swift/…
  • @LayonTavares 以下是 Java 默认使用的不正确 unicode 支持可能导致的错误类型示例:repl.it/HCUn/1
  • @LayonTavares 下面是 Swift 中的同一个示例,它可以正确处理:repl.it/HCVH/1
猜你喜欢
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多