在swift中使用ascii值更改字符值

时间:2014-11-05 15:52:06

标签: swift ascii

我试图通过更改每个字符来更改字符串。

现在我正在做的是一次读取字符串中的一个字符,尝试将其转换为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'

甚至可以做我正在尝试的事情吗?

3 个答案:

答案 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