ios - 关于初始化 viewcontroller (swift)

标签 ios swift swift3 initialization

我有一个名为 TwoViewController.swift 的 ViewController 文件和一个名为 TwoViewController.xib 的 nib 文件。

TwoViewController.swift 像这样 ↓

class TwoViewController: UIViewController {
    var pageTitle: String?

    ・・・・・・
    override func viewDidLoad() {
       super.viewDidLoad()
    }
    ・・・・・・
}

然后,我将新建一个 TwoViewController 并将其呈现在 OneViewController.swift 中,如下所示↓

class OneViewController: UIViewController {

    ・・・・・・
    override func viewDidLoad() {
       super.viewDidLoad()
    }
    ・・・・・・
    func presentTwo() {
       let two = new TwoViewController()
       two.pageTitle = "2222"
       self.present(two, animated: false, completion: nil)
    }
}

但是,我想像这样同时new TwoViewController 并将值设置为属性pageTitle新的 TwoViewController(pageTitle: "22222")

为此,我想我需要在 TwoViewController 中创建一个 init 方法。 我尝试制作如下所示的初始化方法↓。这个对吗?

class TwoViewController: UIViewController {
    var pageTitle: String

    init(pageTitle: String) {
       super.init(nibName: nil, bundle: nil)
       self.pageTitle = pageTitle
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func viewDidLoad() {
       super.viewDidLoad()
    }
    ・・・・・・
}

最佳答案

您可以这样做,但是您必须在每个初始化程序中使用一些您通常不知道的默认值来初始化 pageTitle

因此,这样做并不常见。而是在初始化后分配属性值,就像您最初所做的那样(在 funcTwo 中),然后在 viewDidLoad 中继续处理:

class TwoViewController: UIViewController {
    var pageTitle: String!

    override func viewDidLoad() {
        // use pageTitle to fill some outlet or so:
        self.title = pageTitle
    }
}

或者使 pageTitle 成为可选项,并在 viewDidLoad 中检查是否已设置。


顺便说一句:如果您遵循命名方案并像 View Controller 一样命名 XIB 文件,则可以使用隐式形式:

let twoController = TwoViewController.init()

或明确地

    let twoController = TwoViewController.init(nibName: "TwoViewController", bundle: nil)

关于ios - 关于初始化 viewcontroller (swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41999258/

相关文章:

ios - NotificationCenter 没有调用选择器

iphone - iOS - 旋转后整个 View 向上移动

swift - 包含使用单个数组的部分的 TableView

ios - 这些 MPMediaQuery 结果之间有什么区别?

ios - 尝试使用 reloadsections 重新加载时部分中的行数无效

ios - Swift 3 "didFinishPickingMediaWithInfo"用于 tableview 单元格内的图像

objective-c - 尝试捕捉不起作用

ios - 隐藏导航栏时 UINavigationController 推送弹出

ios - 检测 App 何时滑过 iPad 上正在运行的应用程序

ios - 尝试使用 BGAppRefreshTask 并收到错误 No task request with identifier <decode : missing data> has been scheduled