我试图通过更改每个字符来更改字符串。
现在我正在做的是一次读取字符串中的一个字符,尝试将其转换为ascii,并在值中添加一个字符。我有以下代码。
var phrase = textfield1.text
var i = 0
for character in phrase
{
var s = String(character).unicodeScalars
s[s.startIndex].value
println(s[s.startIndex].value)
if(i == 0)
{
s[s.startIndex].value += 1
}
if(i == 1)
{
s = s + 2
i = 0
}
}
我的println打印出我输入的任何单词的正确值,但是我无法在if语句中操作它。当我尝试它时会出现以下错误:
Could not find member 'value'
甚至可以做我正在尝试的事情吗?
答案 0 :(得分:5)
您收到该错误是因为value
的{{1}}属性是只读的,但您尝试将其递增。
请注意,更改循环中的内容不会对UnicodeScalar
产生任何影响 - 这是使用phrase
执行操作的方法:
map()
答案 1 :(得分:4)
unicodeScalars
属性是只读的,因此您无法直接修改它。
您可以做的是从(修改的)Unicode标量构建一个新字符串:
var text = "HELLO !"
var newText = ""
for uni in text.unicodeScalars {
var val = uni.value
if val >= 0x41 && val < 0x5A { // If in the range "A"..."Y", just as an example
val += 1 // or whatever ...
}
newText.append(UnicodeScalar(val))
}
println(newText) // "IFMMP !"
但请注意val
是Unicode值,而不是ASCII码。您可能想要添加
检查val
之前是否在字母数字字符或类似字符的范围内
修改它。
更新Swift 3:(感谢@adrian。)
let text = "HELLO !"
var newText = ""
for uni in text.unicodeScalars {
var val = uni.value
if val >= 0x41 && val < 0x5A { // If in the range "A"..."Y", just as an example
val += 1 // or whatever ...
}
newText.append(Character(UnicodeScalar(val)!))
}
print(newText) // "IFMMP !"
答案 2 :(得分:0)
我最终得到了一个非常简单的解决方案。
我转换后将数字存储在新变量中
s = String(character).unicodeScalars
x = s[s.startIndex].value
x += 1