Всем привет. Я только начал изучать программирование и полный ноль в разработке, методом проб и ошибок смог распарсить JSON. теперь хочу передать данные, точнее изображение в другой VC. Как это сделать через segue или без?
Первый VC.
class TableViewController: UITableViewController {
private var urlOfPersons = "https://rickandmortyapi.com/api/character"
private var result: [Result]?
override func viewDidLoad() {
super.viewDidLoad()
fetchData()
}
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
if let count = result?.count, count > 1 {
let lastElement = count - 1
if indexPath.row == lastElement {
getData()
}
}
let dataIndex = (result?[indexPath.row])!
cell.getImageData(from: dataIndex)
cell.nameLabel.text = (self.result?[indexPath.row].name ?? "o")
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
guard let vc = storyboard?.instantiateViewController(identifier: "showImage")
as? ShowViewController else { return }
vc.data = result?[indexPath.row]
}
// MARK: - UICollectionViewDelegate
func fetchData() {
result = []
getData()
}
func getData() {
guard let url = URL(string: urlOfPersons) else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else { return }
do {
let decoder = JSONDecoder()
let decode = try decoder.decode(Characters.self, from: data)
self.result?.append(contentsOf: decode.results)
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch let error as NSError {
print(error.localizedDescription)
}
}.resume()
}
мой TableView:
class TableViewCell: UITableViewCell {
@IBOutlet var personImage: UIImageView!
@IBOutlet var nameLabel: UILabel!
func getImageData(from result: Result) {
DispatchQueue.global().async {
guard let imageUrl = URL(string: result.image) else { return }
guard let imageData = try? Data(contentsOf: imageUrl) else { return }
DispatchQueue.main.async {
self.personImage.image = UIImage(data: imageData)
}
}
}
Второй VC.
class ShowViewController: UIViewController {
@IBOutlet var pictureLabel: UIImageView!
var pictureName: String = " "
var data: Result?
override func viewDidLoad() {
super.viewDidLoad()
let image = data?.image
}
Модель данных:
struct Characters: Codable {
let results: [Result]
}
struct Result: Codable {
let name: String
let image : String
}