如何通过 prepare for segue 将不同的 url 传递给下一个 VC?

How to pass a different url to the next VC with prepare for segue?

我想将不同的 url 传递给下一个 VC 与用户通过我的 prepare segue 选择的单元格相比,但我该怎么做?谢谢!

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let idGenderMovie = gendersDataModel[indexPath.row].id
    let urlString = "https://api.themoviedb.org/3/discover/movie?api_key=&with_genres=\(idGenderMovie)"
    performSegue(withIdentifier: "showMovies", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let showMovieFilteredVC = segue.destination as? ShowFilteredMovie else {return}
    showMovieFilteredVC.urlGender = //???
}

正如 Matt 在他的评论中所说,您知道在 didSelectRowAt() 方法中选择了哪个单元格。您使用用户选择的行从您的数据模型中提取 URL,从该 URL 中获取一些数据,然后将该信息放在地板上。

相反,在您的视图控制器 userSelectedRow 中创建一个实例变量,并在您的 didSelectRowAt() 方法中设置它。然后,在您的 prepareForSegue 中,使用选定的行来获取您需要的信息并将其传递给您的目标视图控制器。

编辑:

或者,如 Matt 建议的那样,不保存任何内容。保持选中该行,然后在 prepare(for:) 中查询您的 table 视图以获取其所选行,并使用它来获取您的数据。

顺便说一句,如果 URL 是给远程服务器的,您应该 而不是 使用 Data(contentsOf:) 读取它。这是一个同步调用,它将阻塞您的用户界面,直到它完成。尝试使用该调用从远程服务器读取数据时,您可能会导致 UI 冻结长达 2 分钟。 (这会导致您的应用因无响应而被终止。)