2017-06-07 131 views
1

我可以獲取JSON數據,但我無法將JSON數據添加到abcArr。我在viewDidLoad()中統計abcArr女巫爲0從函數中獲取數據不能在swift中工作3

我在下面複製編碼。

謝謝你的幫助。

我的編碼:

class MapDetailViewController: UIViewController { 
    var abcArr = [String]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     getInfo() 
     print("1: \(abcArr.count)")//output = 0 
    } 

    func getInfo() { 
     //MARK: get News data JSON 
     jsonURL = "http://json/abc.json" 

     if let url = NSURL(string: jsonURL) { 
      URLSession.shared.dataTask(with: url as URL, completionHandler: { (data, response, error) in 
       if let error = error { 
        print("Error: \(error.localizedDescription)") 
       } else { 
        if let data = data { 
         let json = JSON(data: data) 
         let jsonReturn = json["return"] 
         let abc = jsonReturn[i]["Lat"] 
         abcArr.append(abc)  
        } else { 
         print("no JSON data") 
        } 
       } 
      }).resume() 
      print("2: \(abcArr.count)")//output = 0 
     } 
    } 
} 
+0

凡要訪問這個'abcArr'陣列 –

+0

我編輯我的編碼。謝謝您的提醒 – ShingHung

+4

這是一個常見的誤解。 'dataTask'異步工作。數據稍後返回。將「print(abcArr.count)'行放在完成句柄的末尾。 – vadian

回答

0

謝謝您的解決方案Vadian。

將行打印(abcArr.count)放在完成處理程序的末尾。

class MapDetailViewController: UIViewController { 
    var abcArr = [String]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     getInfo() 
    } 

    func getInfo() { 
     //MARK: get News data JSON 
     jsonURL = "http://json/abc.json" 

     if let url = NSURL(string: jsonURL) { 
      URLSession.shared.dataTask(with: url as URL, completionHandler: { (data, response, error) in 
       if let error = error { 
        print("Error: \(error.localizedDescription)") 
       } else { 
        if let data = data { 
         let json = JSON(data: data) 
         let jsonReturn = json["return"] 
         let abc = jsonReturn[i]["Lat"] 
         abcArr.append(abc)  
        } else { 
         print("no JSON data") 
        } 
        print("1: \(abcArr.count)")// display abcArr of count 
       } 
      print("2: \(abcArr.count)")// display abcArr of count 
      }).resume() 
     } 
    } 
} 

我的JSON:

{ 
    return: [{ 
     lat: "1111", 
    }] 
} 
+0

你的處理程序中的變量i從哪裏來? – user3441734

+0

我的JSON只有一個值,所以我不能使用循環 – ShingHung

+0

如果你需要循環,你可以讓'json = JSON(data:data)'行後 – ShingHung