【问题标题】:Put values parsed from JSONResponse to global array swift 3将从 JSONResponse 解析的值放入全局数组 swift 3
【发布时间】:2018-02-10 13:10:28
【问题描述】:

如何使用从 JSONResponse 全局解析的值。因此,远远能够从 JSONResponse 中提取数组,但之后试图将该数组放入全局数组中,而不是了解如何声明全局数组。以某种方式设法做到了这一点,但现在无法从该数组中以索引方式提取值。请指导。

现在尝试的代码:

if (JSONResponse["status"].intValue == 1)
        {

            if let fetchedImages = JSONResponse["data"].arrayObject {
                self.arrResponseReceived = fetchedImages
            }
            print("self.arrResponseReceived", self.arrResponseReceived)
        }
        else
        {
            CommonMethodsClass.showAlertMessage(vc: self, titleStr: "Error!", messageStr: strMsg)
        }

之前尝试过的代码:

arrResponseReceived = JSONResponse["data"].arrayValue

为数组声明的全局变量是:

var arrResponseReceived : [Any] = []

要解析的数据是:

  {
    data =     (
                {
            AverageRating = 4;
            Image = "<null>";
            IsActive = 1;
            Latitude = "28.567806";
            Longitude = "77.3236273";
            SalonAddress = " Sec-58, India";
            SalonEmail = "vy.chan@th-rce.com";
            SalonID = 1;
            SalonImage = "";
            SalonMobile = 9999888877;
            SalonName = Affinity;
            SalonPhone = 9999888877;
            TimeIntervalminutes = 20;
        },
                {
            AverageRating = 5;
            Image = "<null>";
            IsActive = 1;
            Latitude = "";
            Longitude = "";
            SalonAddress = "Mall, India";
            SalonEmail = "rad@th-rce.com";
            SalonID = 3;
            SalonImage = "";
            SalonMobile = 9999888877;
            SalonName = Looks;
            SalonPhone = 9999888877;
            TimeIntervalminutes = 30;
        }
    );
    message = "";
    status = 1;
}

【问题讨论】:

  • 不知道如何为项目创建全局数组?以及如何从中获取值?
  • 我在 self.arrResponseReceived[1] 中获取值,但是当我使用 self.arrResponseReceived[1]["name"] 时。它给出了错误类型“任何”没有下标成员。
  • 你如何声明self.arrResponseReceived数组?
  • 为什么要使用[Any]这样的未指定类型?接收到的类型显然是[[String:Any]]。 Swift 强类型系统的目标是尽可能具体。

标签: ios parsing swift3 alamofire


【解决方案1】:

你应该确定 JSONResponse["data"].arrayValue 内部的类,或者 Xcode 是如何知道它的。 如果你想得到一个由 Dictionary 组成的数据数组,我就是这样欺骗它的。

func getDatas(from json: Any?) -> [Dictionary] {
    guard let json = json as? NSDictionary, let entries = json.value(forKeyPath: "data") as? [NSDictionary] else {
        return []
    }

    return entries.flatMap { entry in
        guard let dictionary = entry as? NSDictionary else {
            return nil
        }
        return dictionary
    }
}

你这样称呼它

self.arrResponseReceived = getDatas(from: json)

NSDictionary 具有接近魔法的方法 value(forKeyPath:)。调用 json.value(forKeyPath: "data") 返回一个字典数组。每个字典都是 json 中的一个“条目”对象。接下来,我映射每个返回字典的条目。

如果这不仅仅是一个快速的解决方案,那么我会考虑将 SwiftyJSON 添加到您的项目中。

func getDatas(from json: Any?) -> [Dicitonary] {
    return JSON(json)["data"].arrayValue.flatMap { entry in
        guard let dictionary = entry as? NSDictionary else {
            return nil
        }
        return dictionary
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多