我有自定义对象,其中包含json。如果我打印它,它看起来像
{
"first_name" = Name;
id = 111111;
"last_name" = LastName;
"photo_100" = "https://url.jpg";
}
此对象具有属性.json。要在Objective-C中从中提取数据,请使用
NSLog(@"id%@", [[response.json firstObject] objectForKey:@"id"]);
但是在Swift中,如果我尝试
var dict = response.json
self.name = dict.firstObject.objectForKey("first_name")
self.lastName = dict.firstObject.objectForKey("last_name")
self.photoUrl = dict.firstObject.objectForKey("photo_100")
我遇到编译或运行时错误。我尝试在dict声明中调用firstObject并尝试向下转换为字符串 - 一切都会导致错误。
如何正确提取数据?
UPD:对象定义
@interface VKResponse : VKObject
/// Request which caused response
@property(nonatomic, weak) VKRequest *request;
/// Json content of response. Can be array or object.
@property(nonatomic, strong) id json;
/// Model parsed from response
@property(nonatomic, strong) id parsedModel;
/// Original response string from server
@property(nonatomic, copy) NSString *responseString;
@end
答案 0 :(得分:1)
如果你可以在Objective C中编写[response.json firstObject]
,那么 response.json 不是字典,而是数组。
在您的Swift代码中,您将其转换为字典,这显然无法正常工作。
答案 1 :(得分:1)
根据您发布的代码,您的自定义对象不包含JSON,它包含从 JSON创建的对象。正如@TheEye在答案中指出的那样,你的客观C代码表明你所拥有的是一系列字典。
Swift比Objective-C更严格地键入。 默认情况下,字典和数组是同类的:字典只能包含键/值对,其中键的类型始终相同,并且值的类型始终相同。
同样,Swift Arrays通常是键入的,因此它们必须包含所有相同类型的对象。
您可以创建包含通用对象的Swift词典或数组([AnyObject: AnyObject]
用于字典,或[Anyobject]
用于数组。
发布自定义对象的定义及其json
属性。我们需要知道它是如何声明的,以便弄清楚你需要做些什么来解决你的问题。
答案 2 :(得分:0)
首先确定你拥有什么样的物品。
if let jsonDict = json as? [String:AnyObject] {
}
if let jsonArray = json as? [AnyObject]{
}