[英]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.