我有两个几乎完全相同的代码段令我困惑。两者的运作方式让我感到惊讶。第一部作品如下所示:
let HTTPBody = NSJSONSerialization.dataWithJSONObject(jsonDict, options: NSJSONWritingOptions.PrettyPrinted, error: &jsonError)
let jsonObj : AnyObject! = NSJSONSerialization.JSONObjectWithData(HTTPBody, options: NSJSONReadingOptions.MutableLeaves, error: &jsonError2)
println(jsonObj)
将JSON对象打印为字符串
{
button = {
name = test;
"price_currency_iso" = USD;
"price_string" = "0.20";
};
}
代码的另一部分,它没有按预期工作
let HTTPBody = NSJSONSerialization.dataWithJSONObject(jsonDict, options: NSJSONWritingOptions.PrettyPrinted, error: &jsonError)
let jsonObj : AnyObject! = NSJSONSerialization.JSONObjectWithData(HTTPBody, options: NSJSONReadingOptions.MutableLeaves, error: &jsonError2)
let jsonData = jsonObj as? NSData
jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)
println(jsonString)
只打印出一个空行,表示" jsonString"是一个空字符串。
Xcode如何知道并能够转换AnyObject!使用println时转换为字符串,但无法从AnyObject创建NSString对象!在同一时间?
答案 0 :(得分:10)
在您的第二部分代码中,您尝试从不存在的jsonString
对象创建NSData
。 NSData
基本上表示任意字节的集合作为数据。但是,您的jsonObj
对象很可能是已经序列化和反序列化的原始NSDictionary
对象的jsonDict
。
要回答您的基本问题,如果您想获得任意AnyObject
类型的字符串表示形式 - 正如您所指出的那样,println
可以处理大部分问题。要创建包含您从println
看到的相同表示形式的String的实际实例,您可以使用以下语法:
let object : AnyObject = ...
let stringRepresentation = "\(object)"
现在,您将从以下两个语句中看到相同的输出:
println(object)
println(stringRepresentation)