簡體   English   中英

無法在Swift 3中從模型類獲取數據?

[英]unable to get data from model class in swift 3?

這是模型類的數據,在其中我從所有詞典中獲取了數據,但無法獲得評級從模型類中獲得的投票中,我需要獲取value鍵值對以用於在UI中顯示評級,誰能幫我解決這個問題?

func ReviewApiDownloadJsonwithURL(reviewApi : String){
            print(reviewApi)
            let url = URL(string: reviewApi)!
            let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
                if error != nil { print(error!); return }
                do {
                    if let jsonObj = try JSONSerialization.jsonObject(with: data!) as? [[String:Any]] {
                        for item in jsonObj {
                             self.reviewModel = Review.init(dict: item)
                        }
                        DispatchQueue.main.async {
                            guard let obj = self.reviewModel else { return }
                            let itemsCount = obj.reviews
                            for i in 0..<itemsCount.count {
                                let customAttribute = obj.reviews[i].ratingVotes
//                                for j in 0..<customAttribute.count {
                                        self.ratingvalue.append(customAttribute[0].value!)
//                                }
                            }
                            print(self.ratingvalue)
                            self.reviewTableView.delegate = self
                            self.reviewTableView.dataSource = self
                            self.activityIndicator.stopAnimating()
                            self.activityIndicator.hidesWhenStopped = true
                            self.reviewTableView.reloadData()
                            self.initialCollectionData()
                        }
                    }
                } catch {
                    print(error)
                }
            }
            task.resume()
    }

這是我的Json數據

在此處輸入圖片說明

這是我的模型類代碼

struct Review  {

    let ratingPercent : Any?
    let count : Any?
    let reviews : [Reviews]


    init(dict : [String:Any]) {
        if let customAttribute = dict["reviews"] as? [[String: AnyObject]] {
            var result = [Reviews]()
            for obj in customAttribute {
                result.append(Reviews(dict: (obj as? [String : Any])!))
            }
            self.reviews = result
        } else {
            self.reviews = [Reviews]()
        }
        self.ratingPercent = dict["avg_rating_percent"]
        self.count = dict["count"]
    }
}

struct Reviews {

    let reviewId : Any?
    let createdAt : Any?
    let entityId : Any?
    let entityValue : Any?
    let statusId : Any?
    let detailId : Any?
    let title : String?
    let detail : String?
    let nickName : String?
    let customerId : Any?
    let entityCode : Any?
    let ratingVotes : [RatingVotes]

    init(dict : [String:Any]) {
        if let customAttribute = dict["rating_votes"] as? [[String: Any]] {
            var result = [RatingVotes]()
            for obj in customAttribute {
                result.append(RatingVotes(dict: (obj as? [String : Any])!))
            }
            self.ratingVotes = result
        } else {
            self.ratingVotes = [RatingVotes]()
        }
        self.reviewId = dict["review_id"]
        self.createdAt = dict["created_at"]
        self.entityId = dict["entity_id"]
        self.entityValue = dict["entity_pk_value"]
        self.statusId = dict["status_id"]
        self.detailId = dict["detail_id"]
        self.title = dict["title"] as? String
        self.detail = dict["detail"] as? String
        self.nickName = dict["nickname"] as? String
        self.customerId = dict["customer_id"]
        self.entityCode = dict["entity_code"]
    }
}

    struct  RatingVotes {
        let voteId : Int?
        let optionId : Int?
        let remoteIp : Any?
        let remoteIpLong : Int?
        let customerId : Any?
        let entityPkValue : Any?
        let ratingId : Int?
        let reviewId : Int?
        let percent : Int?
        let value: Int?
        let ratingCode : String?
        let storeId : Int?
        let code : Int?
        let postion : Int?

        init(dict : [String:Any]) {
            self.voteId = dict["vote_id"] as? Int
            self.optionId = dict["option_id"] as? Int
            self.remoteIp = dict["remote_ip"]
            self.remoteIpLong = dict["remote_ip_long"] as? Int
            self.customerId = dict["customer_id"]
            self.entityPkValue = dict["entity_pk_value"]
            self.ratingId = dict["rating_id"] as? Int
            self.reviewId = dict["review_id"] as? Int
            self.percent = dict["percent"] as? Int
            self.value = dict["value"] as? Int
            self.ratingCode = dict["rating_code"] as? String
            self.storeId = dict["store_id"] as? Int
            self.code = dict["code"] as? Int
            self.postion = dict["position"] as? Int

        }
}

您可能會復制粘貼代碼,這只是Typo錯誤。 您可以通過調試輕松找到它,這是您犯的一個小錯誤

struct Reviews觀察

   if let customAttribute = dict["reviews"] as? [[String: Any]] {
        var result = [RatingVotes]()
        for obj in customAttribute {
            result.append(RatingVotes(dict: (obj as? [String : Any])!))
        }
        self.ratingVotes = result
    } else {
        self.ratingVotes = [RatingVotes]()
    }

您在此處使用關鍵reviews dict["reviews"]

應該像dict["rating_votes"]一樣為rating_votes

希望對您有幫助

您將兩個時間查看字典的值都設為相同。 如果讓customAttribute = dict [“ reviews”]為? [[String:Any]所以在這里將'review'更改為'rating_votes'

或者按照下面的代碼可能會幫助您!

init(dict : [String:Any]) {
    if let customAttribute = dict["rating_votes"] as? [[String: Any]] {
        var result = [RatingVotes]()
        for obj in customAttribute {
            result.append(RatingVotes(dict: (obj as? [String : Any])!))
        }
        self.ratingVotes = result
    } else {
        self.ratingVotes = [RatingVotes]()
    }
    self.reviewId = dict["review_id"]
    self.createdAt = dict["created_at"]
    self.entityId = dict["entity_id"]
    self.entityValue = dict["entity_pk_value"]
    self.statusId = dict["status_id"]
    self.detailId = dict["detail_id"]
    self.title = dict["title"] as? String
    self.detail = dict["detail"] as? String
    self.nickName = dict["nickname"] as? String
    self.customerId = dict["customer_id"]
    self.entityCode = dict["entity_code"]
 }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM