Ios 为什么我的值未传递到secondViewController
我想将简单字符串从oneVC传递到secondVC。我是iOS新手Ios 为什么我的值未传递到secondViewController,ios,json,swift,swift3,segue,Ios,Json,Swift,Swift3,Segue,我想将简单字符串从oneVC传递到secondVC。我是iOS新手 我声明了字符串nameofilm 当我点击CollectionViewItem时,我下载的是JSON,取其中的一个值(字符串)并将其分配给NameOffFilm。然后我就开始转到第二个VC 在具有正确标识符的PrepareForSegue方法中,我将secondVC值与nameOfFlim进行比较。(nextScene.name=NameOffFilm) 结果,当第二个VC进入时,nextScene.name为空。请在此处输入图
var nameOfFilm = String()
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
INDEX_NUMBER_BEFORE = indexPath.row
let filmID = arrayWithID[INDEX_NUMBER_BEFORE]
downloadFilm(url: "https://api.themoviedb.org/3/movie/\(filmID)\(key)&append_to_response=videos,images")
performSegue(withIdentifier: "toTheDetail", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toTheDetail" {
let nextScene = segue.destination as! FilmDetailViewController
nextScene.name = nameOfFilm
}
}
这里的问题是,downloadFilm将是一个在后台发生的异步任务,需要一些时间来发出请求并使用所需的值进行响应 downloadFilm函数应接受回调,以便您可以等待响应值,然后根据该响应执行操作,使用该函数的典型方式如下:
downloadFilm(url: "https://api.themoviedb.org/3/movie/\(filmID)\(key)&append_to_response=videos,images") { filmName in
self.nameOfFilm = filmName
self.performSegue(withIdentifier: "toTheDetail", sender: self)
}
要做到这一点,你需要更新你的下载电影功能,使其类似于此
func downloadFilm(url: String, completion: @escaping (_ filmName: String) -> Void) {
// do work here to setup network request
let task = URLSession.shared.dataTask(with: request) { data, response, error in
// parse response and get name
completion(name)
}
}
是有关Swift完成处理程序的指南,有助于理解该概念。不显示代码图片。在你的问题中正确显示代码。@matt谢谢你给我指出这一点。已编辑。请您发布下载电影方法的代码,需要检查数据操作。