Swift - 从字典中提取数据

时间:2015-12-08 14:28:37

标签: ios swift

我有自定义对象,其中包含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

3 个答案:

答案 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]{

}