var str: String = "sometext"
for i in str.characters.indices
{
str[i] = "c"
}
print(str)
我收到以下错误:
error: cannot assign through subscript: subscript is get-only
答案 0 :(得分:5)
您收到此错误是因为Swift String的下标方法是get-only,就像它在警告中所说的那样。 这与数组不同。
数组:
array[0]
✅
array[0] = 0
✅
<强>字符串:强>
str[0]
❌
str[0] = "0"
❌
str[str.startIndex.advancedBy(0)]
✅
使用replaceRange
完成任务。
示例:强>
var value = "green red blue"
value.replaceRange(value.startIndex.advancedBy(
6)..<value.startIndex.advancedBy(6 + 3),
with: "yellow")
print(value)
<强>结果:强>
green yellow blue
另请参阅Ole Begemann撰写的精彩博客文章,他解释了Swift Strings的工作原理。您还可以找到答案,为什么不能在Swift Strings上使用下标方法。
由于存储Swift字符串的方式,String类型不支持通过整数索引随机访问其字符 - 没有直接等效于NSString的characterAtIndex:方法。从概念上讲,String可以看作是双向链接的字符列表而不是数组。 Article Link
答案 1 :(得分:0)
在某些情况下,最好将String转换为Array,mutate,然后转换回String,例如:
var chars = Array("sometext".characters)
for i in 0..<chars.count {
chars[i] = "c"
}
let string = String(chars)
优点包括:
缺点包括:
选择你的毒药:)