将数组中的字符转换为整数

时间:2014-06-28 05:37:58

标签: ios xcode swift

即使我搜索了文档,我也似乎无法弄清楚如何做到这一点。

我正在试图弄清楚如何将数组中索引处的字符转换为整数。

例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:

var number:Integer = container[3]

感谢您的帮助!

6 个答案:

答案 0 :(得分:9)

Swift并不容易在原始和类型化的事物表示之间进行转换。这是一个在此期间应该有所帮助的扩展:

extension Character {
    func utf8Value() -> UInt8 {
        for s in String(self).utf8 {
            return s
        }
        return 0
    }

    func utf16Value() -> UInt16 {
        for s in String(self).utf16 {
            return s
        }
        return 0
    }

    func unicodeValue() -> UInt32 {
        for s in String(self).unicodeScalars {
            return s.value
        }
        return 0
    }
}

这可以让你非常接近你想要的东西:

let container : Array<Character> = [ "a", "b", "c", "d" ]
/// can't call anything here, subscripting's also broken
let number = container[2]
number.unicodeValue() /// Prints "100"

对于遇到此问题的任何工程师,请参阅rdar:// 17494834

答案 1 :(得分:5)

我不确定它是否有效,但至少它有效。我将Character转换为String然后转换为Int。

String(yourCharacterInArray).toInt()

答案 2 :(得分:4)

你可以试试这个:

var container = "$0123456789"
var number:Int = Array(container.utf8).map { Int($0) }[3]

它完全是丑陋的,但它完成了这项工作。此外,它有点计算成本(每次访问字符串中的字符时为O(n))。这仍然可以成为回归构建CStrings的一种方法:

typealias CString = Array<CChar>
func toCString(string: String) -> CString {
    return Array(string.utf8).map { CChar($0) } + [0]
}
var cString = toCString("$ 0123456789")
println("The 2nd character in cString has value \(cString[1])") // It outputs 32

或没有实现功能:

var container = "$ 0123456789"
var containerAsCString = Array(container.utf8).map { CChar($0) } + [0]
println("The 2nd character in container has value \(containerAsCString[1])") // It outputs 32

答案 3 :(得分:0)

答案 4 :(得分:0)

为什么不直接将字符转换为String,获取unicodeScalars并在标量上提取.value?

类似的东西:

var chr: [Character] = ["C", "B", "A"]

for a in String(chr[1]).unicodeScalars {
    println(a.value)}

答案 5 :(得分:0)

对我来说,有点像:

"\(container[3])".toInt()