Swift可以打印AnyObject,但不能从AnyObject创建String

时间:2014-07-21 06:47:18

标签: string swift

我有两个几乎完全相同的代码段令我困惑。两者的运作方式让我感到惊讶。第一部作品如下所示:

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对象!在同一时间?

1 个答案:

答案 0 :(得分:10)

在您的第二部分代码中,您尝试从不存在的jsonString对象创建NSDataNSData基本上表示任意字节的集合作为数据。但是,您的jsonObj对象很可能是已经序列化和反序列化的原始NSDictionary对象的jsonDict

要回答您的基本问题,如果您想获得任意AnyObject类型的字符串表示形式 - 正如您所指出的那样,println可以处理大部分问题。要创建包含您从println看到的相同表示形式的String的实际实例,您可以使用以下语法:

let object : AnyObject = ...
let stringRepresentation = "\(object)"

现在,您将从以下两个语句中看到相同的输出:

println(object)
println(stringRepresentation)