为什么一开始就不使用var?

时间:2015-04-20 10:46:05

标签: ios swift

我从这个tutorial学习使用swift中的UIPageViewController 在主视图控制器中:


// MARK: - Variables
private var pageViewController: UIPageViewController?

// MARK: - View Lifecycle
override func viewDidLoad() {
        super.viewDidLoad()
        createPageViewController()
        setupPageControl()
}

private func createPageViewController() {

        let pageController = self.storyboard!.instantiateViewControllerWithIdentifier("PageController") as! UIPageViewController
        pageController.dataSource = self

        if contentImages.count > 0 {
            let firstController = getItemController(0)!
            let startingViewControllers: NSArray = [firstController]
            pageController.setViewControllers(startingViewControllers as! [PageItemController], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)
        }

        pageViewController = pageController
        addChildViewController(pageViewController!)
        self.view.addSubview(pageViewController!.view)
        pageViewController!.didMoveToParentViewController(self)
    }

任何人都可以向我解释,为什么我们不会在开头分配pageViewController,如:

pageViewController = self.storyboard!.instantiateViewControllerWithIdentifier("PageController") as! UIPageViewController

为什么我们需要将值分配给" let"变量然后分配" let"变量为" var"变量?

为什么我们让事情变得复杂? :)

1 个答案:

答案 0 :(得分:3)

你的方式绝对可行。请注意,从来没有一种正确的编码方式。但是,您忽略了一个副作用 - instantiateViewControllerWithIdentifier返回一个带有未定义类型(AnyObject!)的可选项,因此我们必须将其强制转换为特定类型UIPageViewController。副作用是程序员决定在演员表中使用as!删除可选项(结果为UIPageViewController而不是UIPageViewController!)。

通常,在每个函数的开头删除选项,然后使用非选项是有用的。由于实例变量pageViewController是可选的,因此使用它会更难,更不易读,因为每次使用时都必须检查nil(或强制解包)。

请注意代码中的差异:

pageController.setViewControllers(...
...
pageViewController!.didMoveToParentViewController(...

在我看来,你的例子中的代码不是很好,因为它可以自由地结合这两种方法。使用

pageViewController!.setViewControllers(...
...
pageViewController!.didMoveToParentViewController(...

pageController.setViewControllers(...
...
pageController.didMoveToParentViewController(...

会更具可读性。