即使我搜索了文档,我也似乎无法弄清楚如何做到这一点。
我正在试图弄清楚如何将数组中索引处的字符转换为整数。
例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:
var number:Integer = container[3]
感谢您的帮助!
答案 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)
为什么不只是循环数组并将所有内容转换为Int?
答案 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()