iOS / Swift-Swift中UIViewController中的常量

时间:2018-11-25 10:11:33

标签: ios swift

假设我的控制器使用了一个视图模型来询问某些数据或功能,那么实例化一次后,该视图模型就不会改变,对吗?但是在视图控制器中,我使用Perform Segue进行导航,等等,我无权访问初始化程序,因此无法使用诸如此类的东西:

let myViewModel: MyViewModel

然后我必须改用它:

var myViewModel: MyViewModel!

我对此并不满意,有人可以提出一个好的解决方案吗? tnx队友:)

3 个答案:

答案 0 :(得分:2)

那很好,对于您的IBOutlets也一样。 从实例化ViewController到设置模型的那一刻,它的值为nil。这意味着它不是常量,即使您没有在ViewController的整个生命周期中对其进行更改。

答案 1 :(得分:1)

从情节提要中加载视图控制器时,您无法控制初始化(因为控制器未由您初始化),因此您无能为力。其他选项相似,并且其中任何一个都没有真正的优势。这是一个主观决定:

您可以将变量声明为普通的可选

int compare = this.getStartDate().compareTo(o.getStartDate());
if (compare > 0 && this.getStartDate().charAt(1) >= '1' && this.getStartDate().charAt(1) <= '7')
        return -1;
if (compare < 0 && o.getStartDate().charAt(1) < '1' && o.getStartDate().charAt(1) > '7')
        return 1;
return compare;

但是如果控制器真的不能在没有设置数据的情况下工作,我宁愿自己使用var myViewModel: MyViewModel? ,因为不设置数据模型应该是致命的错误。

在某些情况下,您还可以使用默认值,例如:

!

我的数据设置器通常如下所示:

var myViewModel = MyViewModel()

答案 2 :(得分:0)

如果要在实例化后更改ViewModel,可以使用var声明。

在segue函数中,如果将viewModel实例定义为还编写了segue函数的类的class属性,则可以访问该视图模型实例。

在segue函数中创建viewModel的隐式展开实例不是一个好主意。

var myViewModel: MyViewModel!

这可能导致崩溃。