Alamofire - 如何获取表中的记录数

时间:2018-03-17 05:48:55

标签: ios arrays iphone swift alamofire

我有这段代码:

func downloadDataRanking(completed: @escaping () -> ()){
        Alamofire.request(rankingGroupUrlToShow, method: .get, parameters: nil)
            .responseJSON { response in
                let jsonResponse = JSON(response.result.value!)
                if (jsonResponse.isEmpty || jsonResponse != "{}") {
                    if(jsonResponse["ranking"]["grupy"].count > 0){
                        let grupy = jsonResponse["ranking"]["grupy"].array
                        if (grupy!.count > 0) {
                            for i in 0...(grupy?.count)! - 1 {


                                var tablicaGraczy = 0
                                if (grupy![i]["grupy"].array != nil){
                                    tablicaGraczy = grupy![i]["grupy"].array?.count  // ilość graczy @@@@ tu jest problem
                                }

                                let graczeRankingu = grupy![i]["grupy"].array
                                print("graczeRankingu: \(graczeRankingu)")

                                if tablicaGraczy > 0 {



                                    DispatchQueue.main.async { // watek od rysowania interface
                                        for ii in 0...(tablicaGraczy) - 1 {
                                            print("GRACZ: \(graczeRankingu![ii]["czasGry"]) ii \(graczeRankingu![ii]["liczbaZdobytychPunktow"]) ii \(graczeRankingu![ii]["email"]) ii \(graczeRankingu![ii]["zdjecieZFacebooka"]) ii \(graczeRankingu![ii]["imieINazwisko"]) ii \(graczeRankingu![ii]["dataZdobyciaPunktow"]) ii \(graczeRankingu![ii]["zakonczonaGra"]) ii ")


                                            var dataZdobyciaPunktow = ""
                                            if (graczeRankingu![ii]["dataZdobyciaPunktow"]["year"].int != nil){
                                                dataZdobyciaPunktow = "\(graczeRankingu![ii]["dataZdobyciaPunktow"]["dayOfMonth"].int!).\(graczeRankingu![ii]["dataZdobyciaPunktow"]["month"].int!).\(graczeRankingu![ii]["dataZdobyciaPunktow"]["year"].int!)"

                                            }


                                            var imieINazwisko = ""
                                            if (graczeRankingu![ii]["imieINazwisko"].string?.isEmpty == false){
                                                imieINazwisko = graczeRankingu![ii]["imieINazwisko"].string!
                                            }

                                            var zdjecieZFacebooka = ""
                                            if (graczeRankingu![ii]["zdjecieZFacebooka"].string?.isEmpty == false){
                                                zdjecieZFacebooka = graczeRankingu![ii]["zdjecieZFacebooka"].string!
                                            }

                                            var email = ""
                                            if (graczeRankingu![ii]["email"].string?.isEmpty == false){
                                                email = graczeRankingu![ii]["email"].string!
                                            }

                                            var liczbaZdobytychPunktow = ""
                                            if (graczeRankingu![ii]["liczbaZdobytychPunktow"].string?.isEmpty == false){
                                                liczbaZdobytychPunktow = graczeRankingu![ii]["liczbaZdobytychPunktow"].string!
                                            }

                                            var czasGry = ""
                                            if (graczeRankingu![ii]["czasGry"].string?.isEmpty == false){
                                                czasGry = graczeRankingu![ii]["czasGry"].string!
                                            }
                                        }
                                        print("WYNIKI: \(self.items)")
                                        completed()

                                    }
                                }

                            }
                        }
                    }
                }

            }
    }

以上代码包含: a)使用Alamofire从所选URL下载数据 b)检查下载的表是否为空 c)将下载的值保存到变量

我对此代码有疑问:

var tablicaGraczy = 0
if (grupy![i]["grupy"].array != nil){
tablicaGraczy = grupy![i]["grupy"].array?.count  
}

我收到一条错误消息:可选类型'Int?'的值没有打开;你的意思是用'!'还是'?'?

此代码用于检查记录数是否有数组 - 如果为空,则将其指定为0

顺便说一句。你写变量:imieINazwisko,zdjecieZFacebooka,email,liczbaZdobytychPunktow,czasGry - 你的意见是否正确?你知道更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

为了更好的做法,不要仅在请求方法中进行JSON解析,您应该在完成块中传递响应并执行操作。

另外,请阅读如果let / guard让我们如何解包。 :https://medium.com/@abhimuralidharan/if-let-if-var-guard-let-and-defer-statements-in-swift-4f87fe857eb6

这是APIHelper类:

import UIKit
import Alamofire


class APIHelper: NSObject{

    func downloadDataRanking(completion: @escaping ([String: Any], Bool) -> ()){
        guard let requestUrl = URL.init(string: "http://serwer1356363.home.pl/pub/json.php") else { return }
        Alamofire.request(requestUrl, method: .get, parameters: nil)
            .responseJSON { response in

                switch response.result{
                case .success:
                    let statusCode: Int = (response.response?.statusCode)!
                    switch statusCode{
                    case 200:
                        if let json = response.result.value as? [String: Any]{
                            completion(json, true)
                        }
                        break
                    default:
                        completion([String: Any](), false)
                        break
                    }
                    break
                case .failure:
                    completion([String: Any](), false)
                    break
                }
        }
    }
}

在您的控制器中调用此功能:

func fetchData(){
        APIHelper().downloadDataRanking { (response, success) in
            if success{
                print("SUCCESS : downloadDataRanking")
                if !response.isEmpty{
                    if let ranking = response["ranking"] as? [String: Any], let grupy = ranking["grupy"] as? [[String: Any]], !grupy.isEmpty {
                        print("ranking : \(ranking)")
                        print("grupy : \(grupy)")


                        for object in grupy{
                            if let gracze = object["gracze"] as? [[String: Any]], !gracze.isEmpty{
                                for objectGracze in gracze{
                                    print("objectGracze : \(objectGracze)")
                                    if let zdjecieZFacebooka = objectGracze["zdjecieZFacebooka"] as? String, let email = objectGracze["email"] as? String, let czasGry = objectGracze["czasGry"] as? String{
                                        print("zdjecieZFacebooka : \(zdjecieZFacebooka)")
                                        print("email : \(email)")
                                        print("czasGry : \(czasGry)")
                                    }

                                    if let dataZdobyciaPunktow = objectGracze["dataZdobyciaPunktow"] as? [String: Any]{
                                        print("dataZdobyciaPunktow : \(dataZdobyciaPunktow)")

                                        if let year = dataZdobyciaPunktow["year"] as? Int, let month = dataZdobyciaPunktow["month"] as? Int{
                                            print("year : \(year)")
                                            print("month : \(month)")
                                        }
                                    }
                                }

                            }
                        }

                    }
                }
            }else{
                print("ERROR : downloadDataRanking")
            }
        }
    }

在此功能中,您可以获取所有JSON值。例如,我正在获得排名,grupy,zdjecieZFacebooka,电子邮件和czasGry。