讓我通過說我是Swift 2的新手,並構建我的第一個調用api(php)數據(JSON)的應用程序。我遇到的問題是,當我調用api時,其他函數在api可以發回數據之前運行。Swift 2 api調用需要比其他函數運行更長的時間
我研究了一些onComplete類型,以便在api響應完成後調用一個函數。我相信你們中的大多數人很容易,但我似乎無法想象它是我們的。
在此先感謝!
class ViewController: UIViewController {
var Selects = [Selectors]()
var list = [AnyObject]()
var options = [String]()
var index = 0
@IBOutlet var Buttons: [UIButton]!
override func viewDidLoad() {
super.viewDidLoad()
self.API()
self.Render()
}
func API() {
let url = NSURL(string: "http:api.php")
let request = NSMutableURLRequest(URL: url!)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if data == nil {
print("request failed \(error)")
return
}
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
if let songs = json["songs"] as? [[String: AnyObject]] {
for song in songs {
self.list.append(song)
}
}
self.Selects = [Selectors(Name: self.list[self.index]["name"] as? String, Options: self.BuildOptions(), Correct: 2)]
}
catch let error as NSError {
print("json error: \(error.localizedDescription)")
}
}
task.resume()
}
func BuildOptions() {
// BuildOptions stuff happens here
}
func Render() {
// I do stuff here with the data
}
}
我正在構建一個包含十個問題的測驗樣式應用程序。在每個被回答的問題之後,調用Render()方法來填充下一個問題和選項。我有興趣瞭解API調用應該去哪裏,我正在學習,這聽起來像我需要更多地瞭解它。感謝您的反饋 – Mike
因此,基本上,當視圖加載時,您從測驗的API中獲取一些數據?我將編輯答案 – FruitAddict
正確,我抓住一個帶有十個元素的JSON對象,並將其推入列表數組中。 – Mike