让我通过说我是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