DetailViewController初始化程序问题

时间:2020-08-28 21:25:24

标签: swift

我试图通过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()
  }
}

1 个答案:

答案 0 :(得分:1)

通常要做的是使这些可选项目:

class DetailViewController: UIViewController {
  var selectedCity : City?
  var selectedCountry : Country?

这解决了初始化程序问题,因为现在这些属性都有一个初始值,即nil。但是,您将需要相应地调整其余代码。但是编译器会指导您,所以不会困难。

相关问题