我试图通过segue传递对象,但是,在DetailViewController中出现错误。它说DetailViewController没有selectedCountry和selectedCity初始化程序。我该如何克服这个问题,或者有更好的方法来传递数据?
SelectedCountry.swift
import Foundation
struct SelectedCountry {
var selectedCountry : Country
var selectedCity : City
}
MainViewController.swift
let selectedItem = SelectedCountry(
selectedState: self.stateVM.cityState(atIndex: selectedIndexPath.row),
selectedCity: self.cityVM.cityItem(atIndex: selectedIndexPath.row))
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "isCountry" {
if let selectedItem = sender as? SelectedCountry, let detailViewController = segue.destination as? DetailViewController {
detailViewController.selectedState = selectedItem.selectedState
detailViewController.selectedCity = selectedItem.selectedCity
}
}
}
DetailViewController.swift
class DetailViewController: UIViewController {
// initializatior issue
var selectedCity : City
var selectedCountry : Country
override func viewDidLoad() {
super.viewDidLoad()
displayData()
}
}
答案 0 :(得分:1)
通常要做的是使这些可选项目:
class DetailViewController: UIViewController {
var selectedCity : City?
var selectedCountry : Country?
这解决了初始化程序问题,因为现在这些属性都有一个初始值,即nil
。但是,您将需要相应地调整其余代码。但是编译器会指导您,所以不会困难。