我有这段代码:
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 - 你的意见是否正确?你知道更好的解决方案吗?
答案 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。