我正在做一个30天的课程来学习SWIFT 4.2,而starter项目有一个表视图来展示30个应用程序,每天一个。所以,有特定于一天的故事板。
代码如下:

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!
    var dataModel = NavModel.getDays()

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self
        navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItem.Style.plain, target: nil, action: nil)

    }

    // MARK: uitableview delegate and datasource
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        print ("This is dataModel.count: ", dataModel.count)
        return dataModel.count

    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! ContentTableViewCell
        cell.data = dataModel[indexPath.row]
        print(cell.data!)
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let dayCount = dataModel[indexPath.row].dayCount
        print("This is dayCount: ", dayCount)
        let initViewController = UIStoryboard(name: "Day\(dayCount)", bundle: nil).instantiateInitialViewController()
        self.navigationController?.pushViewController(initViewController!, animated: true)

    }
}

如何更新此代码段:
let initViewController = UIStoryboard(name: "Day\(dayCount)", bundle: nil).instantiateInitialViewController()

如果应用程序找不到一个不存在的故事板,以防止应用程序崩溃?
下面是NavModel.swift的代码:
import UIKit

class NavModel {

    var dayCount: Int
    var title: String
    var color: UIColor

    init(count: Int, title: String, color: UIColor) {
        self.dayCount = count
        self.title = title
        self.color = color
    }

    class func getDays() -> [NavModel] {
        var model = [NavModel]()
        for i in 1...30 {
            let nav = NavModel(count: i, title: "Day (i)", color: UIColor.randomFlatColor())
            model.append(nav)
        }
        return model
    }
}

最佳答案

你不能阻止代码崩溃。找不到引用的情节提要是无法捕获的致命错误。
在测试过程中,您需要了解的是,引用不是包的故事板。
适当的解决方案是更改数据模型,使其仅包含您有故事板的数据。也就是说,如果今天是第10天,那么NavModel.getDays()应该只返回10个数据项。
我将把NavModel重写为:

import UIKit

struct NavModel {

    let dayNumber: Int
    var title: String {
        get {
            return "Day \(dayNumber)"
        }
    }
    let color: UIColor


    static func getDays(count: Int) -> [NavModel] {
        var model = [NavModel]()
        for i in 1...count {
            model.append(NavModel(dayNumber: i, color: UIColor.randomFlatColor()))
        }
        return model
    }
}

然后创建模型,比如说,NavModel.getDays(count:10)

10-08 12:27