我想在Segue调用上进行2个API调用,并最终将第二个调用的数据数组传递到CollectionView
。随着第一个电话我得到一个值catID
,这是我需要,以使其他电话:问题传递数据到函数内的segue.destination内函数
let searchEndpoint: String = MY_ENDPOINT
// Add auth key
let serviceCallWithParams = searchEndpoint + "?PARAMETER"
guard let url = URL(string: serviceCallWithParams) else {
print("Error: cannot create URL")
return
}
let urlRequest = URLRequest(url: url)
// setting up the session
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
// making the request
let task = session.dataTask(with: urlRequest) {
(data, response, error) in
// error check
guard error == nil else {
print("error")
print(error)
return
}
// make sure we got data
guard let responseData = data else {
print("Error: did not receive data")
return
}
// parse JSON
do {
guard let catData = try JSONSerialization.jsonObject(with: responseData, options: []) as? [String: AnyObject] else {
print("error converting data to JSON")
return
}
if let data = catData["data"] as? [String: Any] {
if let array = data["categories"] as? [Any] {
if let firstObject = array.first as? [String: Any] {
if let catId = firstObject["catId"] as? Int {
getTitles(catId: catId)
}
}
}
}
} catch {
print("error converting data to JSON")
return
}
}
task.resume()
然后getTitles功能如下:
现在当我把:
let resultsVC = segue.destination as? CollectionViewController
resultsVC?.books = self.books
外部函数,在目标控制器中我得到一个空数组作为第一次点击输出,但在每一个下一个我得到正确的数据。 当我试图把这个内部函数“getTitles”在CollectionViewController输出“无”每次。 值得提及的是,我有“书” 规定,像这样变量:
主控制器:
var books: [Book]? = []
采集控制器:
var books: [Book]?
和我创建了基本上以3 str为对象的[Book]类型变量在单独的结构中。
所有上面的代码被封装在
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ShowResults" {
的任何帮助/指导将不胜感激!
当你写self.performSegueWithIdentifier(“ShowResults”,发件人:无)?添加调用Segue的代码。 –
你的API调用将异步完成,所以你需要从完成关闭 – Paulw11