0

我正在使用此 API来获取用户的关注者列表,并按照文档中的描述以 JSON 格式返回关注者。这是返回对象的片段:

{
  "users": [
    {
      "id": 2960784075,
      "id_str": "2960784075",
      "name": "Jesus Rafael Abreu M",
      "screen_name": "chuomaraver",
      "location": "",
      "profile_location": null,
      "url": null,
      "description": "",
      "protected": false,
      "followers_count": 1,
      "friends_count": 101,
      "listed_count": 0,
      "created_at": "Sun Jan 04 19:58:06 +0000 2015",
      .....
      .....
      "default_profile": true,
      "default_profile_image": false,
      "following": false,
      "follow_request_sent": false,
      "notifications": false,
      "muting": false
    },
    .....
    .....
],
  "next_cursor": 1489467234237774933,
  "next_cursor_str": "1489467234237774933",
  "previous_cursor": 0,
  "previous_cursor_str": "0"
}

正如您所注意到的,用户对象有很多属性,我不想一一解析它们或使用库来为我做这些。

TwitterKit 有一个名为 TWTRUser 的类,这里是它的文档。要初始化此类的对象,您可以使用一个构造函数,该构造函数采用 JSON 字典,如下所示:

let follower = TWTRUser(jsonDictionary: jsonDictionary)

通过这种方式,我可以获得解析并初始化对象的返回给我的 JSONTWTRUser对象。

问题是TWTRUser没有返回 JSON 中列出的所有属性,它只有文档中列出的这些属性:

userID 属性
名称 属性
screenName 属性
isVerified 属性
isProtected 属性
profileImageURL 属性
profileImageMiniURL 属性
profileImageLargeURL 属性
formattedScreenName 属性
profileURL 属性

我尝试使用valueForKey方法,该方法接受一个键并返回它的值,如下所示:

let createdAt = follower.value(forKey: "created_at")

我以为它会起作用,但它没有。当我使用它时,应用程序崩溃并给我以下消息:

由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[valueForUndefinedKey:]:此类不符合键值编码的键值贡献者_启用。”

What could I do to get all the user's properties using TWTRUser class?

4

2 回答 2

2

value(forKey:)是一个继承的方法NSObject,它用于键值编码,因此它不返回 JSON 的结果。这个TWTRUser类只定义了 10 个属性,这就是你所能得到的。如果要获取其他属性,则必须使用以下代码行自己解析 JSON(使用标准库)

let user = try JSONSerialization.jsonObject(with: jsonDictionary) as? [String: Any]
于 2017-09-16T12:08:42.370 回答
1

首先,就像已经提到的那样,不要使用value(for key),如果对象具有该值,它可能会通过公共属性公开它。

我的建议是 subclass TWTRUser,将您想要的属性添加到您的新类(您可以将其称为类似TwitterUser)并覆盖init(json),您可以在其中查看字典是否包含您想要的值并将它们添加到对象中。

之后,您将能够像访问TWTRUser类中的任何其他属性一样访问这些属性。

于 2017-09-16T14:43:53.510 回答