繁体   English   中英

Swift-从字典中提取数据

[英]Swift - extract data from dictionary

我有自定义对象,其中包含json。 如果我打印,它看起来像

{
    "first_name" = Name;
    id = 111111;
    "last_name" = LastName;
    "photo_100" = "https://url.jpg";
}

该对象具有.json属性。 为了从目标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

如果您可以在目标C中编写[response.json firstObject] ,则response.json不是字典 ,而是数组

在您的Swift代码中,您将其转换为字典,这显然是行不通的。

根据您发布的代码,自定义对象不包含JSON,它包含 JSON创建的对象。 正如@TheEye在回答中指出的那样,您的目标C代码表明您所拥有的是一系列字典。

Swift比Objective-C更严格地键入。 默认情况下,字典和数组是同构的:字典只能包含键/值对,其中键的类型始终相同,而值的类型始终相同。

同样,通常会键入Swift数组,因此它们必须包含所有相同类型的对象。

您可以创建包含通用对象的Swift字典或数组(字典的[AnyObject: AnyObject]或数组的[Anyobject] )。

发布自定义对象的定义及其json属性。 我们需要知道它是如何声明的,以便准确找出解决问题所需采取的措施。

首先确保您拥有哪种对象。

if let jsonDict = json as? [String:AnyObject] {

}
if let jsonArray = json as? [AnyObject]{

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM