将原始数据 "AnyObject?" 转换为 NSData 或 String

Convert Raw Data "AnyObject?" to NSData or String

过去几天我一直被困在这个问题上,并且在 Whosebug 和网络上阅读了无数帖子,但我仍然有点迷茫。 (顺便说一下,我是 Swift 的新手)。

我有以下代码

Alamofire.request(.GET, "url") .response { (request, response, data, error) in printIn(data)}

这在控制台中打印出一长串数字,非常完美,正是我需要的。

但是我现在想遍历这些并获取特定索引处的数字,所以想将其转换为字符串或 NSData。

我尝试了很多不同的方法,但还没有找到如何做到这一点,如果有人能帮助我,我将不胜感激。

我试过使用

Alamofire.request(.GET, "url")
    .responseString(encoding: NSASCIIStringEncoding) { (request, response, data, error) -> Void in
        println(data)
    }

但这只会打印出一团乱麻。

非常感谢

克里斯

数据是 NSData 和 ascii 编码的(在你的第二个例子中)

let s = NSString(data: data, encoding: NSASCIIStringEncoding)

在第一种情况下,您没有指定编码,因此它默认为 NSUTF8

let s = NSString(data: data, encoding: NSUTF8StringEncoding)

你说:

However I now would like to iterate through these and get the number at certain index's, so would like to convert this into a string or NSData.

当你使用response时,data参数实际上一个NSData。所以只需将变量转换为适当的类型,你就可以正常工作了,例如:

Alamofire.request(.GET, urlString)
    .response { (request, response, data, error) in
        if let data = data as? NSData {
            for i in 0 ..< data.length {
                var byte: UInt8!
                data.getBytes(&byte, range: NSMakeRange(i, 1))
                print(String(format: "%02x ", byte))
            }
        }
}

在我的示例循环中,只记录 byte 变量的十六进制字符串表示,但它是一个数值,您可以使用它做任何您想做的事情。