【问题标题】:How to pass a variable through a segue in swift?如何在 swift 中通过 segue 传递变量?
【发布时间】:2020-09-04 10:41:05
【问题描述】:

这是我的主要UITableViewController 中的代码块,类为InventoryTableViewController

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        super.prepare(for: segue, sender: sender)
        switch segue.identifier! {
            case "detailSegue":
                guard let inventoryDetail = segue.destination as? InventoryDetailView else {
                    fatalError("Unexpected destination: \(segue.destination)")
                }
                guard let selectedVehicleCell = sender as? InventoryTableViewCell else {
                    fatalError("Unexpected sender: \(String(describing: sender))")
                }
                guard let indexPath = tableView.indexPath(for: selectedVehicleCell) else {
                    fatalError("The selected cell is not being displayed by the table")
                }
                let selectedVehicle = vehicles[indexPath.row]
                inventoryDetail.vehicle = selectedVehicle as? InventoryDetailView.Inventory
                printGenericInfo(selectedVehicle)
                default:
                fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))")
        }
   }

   func printGenericInfo<T>(_ value: T) {

        let t = type(of: value as Any)
        print("'\(value)' of type '\(t)'")
   }

我正在尝试传递 selectedVehicle。当我打印值和类型时,它如下(并且是正确的):

Inventory(id: 1004, year: "2014", make: "MakeWith15Chars", model: “ModelWith15Char”,主体:“BodyWith15Chars”,内部:“Hickory”, 外观:“磁性灰色”,VIN:“2C4RDGCG0FR805928”,里程:“10450”, msrp: "33,800.00", cost: "28,100.00") 库存类型

InventoryDetailView中的代码块如下:

class InventoryDetailView: UIViewController {

    var vehicle: Inventory!
    struct Inventory: Hashable, Codable, Identifiable {
                var id: Int
                var year: String
                var make: String
                var model: String
                var body: String
                var interior: String
                var exterior: String
                var vin: String
                var miles: String
                var msrp: String
                var cost: String
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        yearMakeLabel.text = vehicle?.year
    }
}

当我在 InventoryDe​​tailView 中打印车辆的值为 nil 时。为什么?我做错了什么?

【问题讨论】:

  • 您是否从 UITableViewCell 而不是 UITableView 连接 segue?你能检查一下哪个是第一个被调用的吗? viewDidLoad()InventoryDetailViewprepare(for:sender)InventoryTableViewController
  • segue 肯定来自 UITableViewCell
  • 尝试删除segue,然后将其从InventoryTableViewController重做为InventoryDetailView
  • 顺序是先prepare(for:sender)再viewDidLoad()
  • 我改变了segue。还是没有

标签: ios swift uitableview uiviewcontroller


【解决方案1】:

我认为,首先,你必须删除这行super.prepare(for: segue, sender: sender),因为你不需要调用它

【讨论】:

  • 我删除了那条线,但它仍然没有出现
猜你喜欢
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多