Ios 为什么我的值未传递到secondViewController

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为空。请在此处输入图

我想将简单字符串从oneVC传递到secondVC。我是iOS新手

  • 我声明了字符串nameofilm
  • 当我点击CollectionViewItem时,我下载的是JSON,取其中的一个值(字符串)并将其分配给NameOffFilm。然后我就开始转到第二个VC
  • 在具有正确标识符的PrepareForSegue方法中,我将secondVC值与nameOfFlim进行比较。(nextScene.name=NameOffFilm)
  • 结果,当第二个VC进入时,nextScene.name为空。请在此处输入图像描述 我正确地解析了JSON。我想可能是时间不匹配,有些功能太快了。是什么导致了问题

    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谢谢你给我指出这一点。已编辑。请您发布下载电影方法的代码,需要检查数据操作。