2017-11-04 72 views
0

这里是模型类的数据,其中我从所有字典中获取数据,但无法从模型类中获取ratingVotes,我需要获取value键值对以用于在UI中显示评分任何人都可以帮助我如何解决这个?无法在swift 3中从模型类获取数据?

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数据

enter image description here

这里是我的模型类代码

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 

     } 
} 
+0

一切工作正常,除了'ratingVotes'。对? – trungduc

+0

是剩余的数据我得到了@trungduc – user0246

回答

0

这只是错字错误,你可能会复制粘贴代码。您可以轻松地通过调试发现这里是你做

观察这里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]() 
    } 

您使用此dict["reviews"]

关键reviews它应该是一个小错误rating_votesdict["rating_votes"]

希望对你有所帮助

+0

https://i.stack.imgur.com/Gs368.png但是在这里崩溃 – user0246

+0

@ user0246您的回复您在'ratting_votes'字典中使用'self'时有字符串值。 value = dict [“value”] as? Int'将永远失败。请在开始实际执行之前正确地注意响应 –

+0

只有这个问题我用字符串替换它然后工作正常 – user0246

0

你已经得到了tim e审查字典相同的价值。 如果让customAttribute = dict [“reviews”] as? [[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"] 
} 
}