【问题标题】:Swift - extract data from dictionarySwift - 从字典中提取数据
【发布时间】:2015-12-08 23:43:54
【问题描述】:

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

【问题讨论】:

  • 你遇到什么样的错误?这个json 变量是什么类型的?

标签: ios swift


【解决方案1】:

如果你可以在Objective C中写出[response.json firstObject],那么response.json就不是一个字典,而是一个数组。 p>

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

【讨论】:

    【解决方案2】:

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

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

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

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

    发布您的自定义对象的定义,它是json 属性。我们需要知道它是如何声明的,以便准确地确定您需要做什么来解决您的问题。

    【讨论】:

    • 那是Objective-C代码,正如TheEye指出的那样,它是使用类型id定义的,相当于Swift的AnyObject类型,没什么用。
    【解决方案3】:

    首先确定你有什么样的对象。

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

    【讨论】:

      猜你喜欢
      • 2018-11-23
      • 2021-10-14
      • 1970-01-01
      • 2016-04-28
      • 2021-11-25
      • 2019-08-12
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多