HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – UIViewController变量初始化大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究快速语言,我对UIViewController中的变量初始化有疑问.在我的DiagramViewController中,我有一些变量: @H_450_2@class DiagramViewController: UIViewController { var type: Constants.DiagramType var filename: String var numberOfBars: Int var numberOfSection: Int var diagramname: String override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

Swift需要这些var的init值,我可以通过多种方式实现,但是我应该如何在这些方式之间进行选择?

我可以初始化变量“inline”:

@H_450_2@class DiagramViewController: UIViewController { var type: Constants.Diagramtype = constants.DiagramType.HISTOGRAM var filename: String = "dd.txt" var numberOfBars: Int = 10 var numberOfSection: Int = 5 var diagramname: String = "Diagram" override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

我可以初始化覆盖构造函数的变量:

@H_450_2@class DiagramViewController: UIViewController { var type: Constants.DiagramType var filename: String var numberOfBars: Int var numberOfSection: Int var diagramname: String required init(coder aDecoder: NSCoder) { type = constants.DiagramType.HISTOGRAM filename = "dd.txt" numberOfBars = 10 numberOfSection = 5 diagramname = "Diagram" super.init(coder: aDecoder) } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

我可以初始化变量,将它们声明为可选变量:

@H_450_2@class DiagramViewController: UIViewController { var type: Constants.DiagramType? var filename: String? var numberOfBars: Int? var numberOfSection: Int? var diagramname: String? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. type = constants.DiagramType.HISTOGRAM filename = "dd.txt" numberOfBars = 10 numberOfSection = 5 diagramname = "Diagram" } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

我可以初始化变量,将它们声明为Implicitly Unwrapped Optional:

@H_450_2@class DiagramViewController: UIViewController { var type: Constants.DiagramType! var filename: String! var numberOfBars: Int! var numberOfSection: Int! var diagramname: String! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. type = constants.DiagramType.HISTOGRAM filename = "dd.txt" numberOfBars = 10 numberOfSection = 5 diagramname = "Diagram" } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

为什么选择一种方法而不是另一种?有关此问题的典型模式还是某种标准?也许其中一些解决方案比其他解决方案更清洁,甚至更高效.请帮我理解它们之间的区别.先感谢您.

解决方法

这个问题可归纳为“何时应该使用选项?”.关于这个问题有很多很棒的文章和文档,但我会尝试将我的经验与我阅读的文档和文章结合起来.

然Optionals在使用时具有非常特定的功能,但我想将它们更多地视为一种关于变量本身而不是声明功能的方式.当我读到:

@H_450_2@var myVar:Class? = nil

这意味着,我们永远不应该预期myVar被分配,而是我们应该始终预测这两个条件,第一个是myVar有值,而不是.我假设这些东西是因为它的功能性?可选带到桌子上.编译器不允许您在不解包的情况下使用myVar.因此,编译器建议(无论何时访问属性函数)使用此语法:

@H_450_2@myVar?.myProperty = something

因为?之前 .在解开myVar并执行代码行之前,这行代码将检查myVar是否为nil.因此,我们预测并处理了这两个条件.如果myVar是nil,那么这行代码基本上会被“忽略”,如果不是,则执行.

这与其他类型的可选项形成对比!:

@H_450_2@myVar!.myProperty = something

这将始终尝试打开myVar.这行代码将导致异常,说明以下内容:“在展开值时意外发现nil.”.然?会地失败.

如果我们改变myVar的声明来使用!可选的:

@H_450_2@var myVar:Class! = nil

然后我们总是可以使用myVar而不会遇到编译器错误,说我们需要在使用之前解包myVar.例如,与其他可选(?)不同,我们可以说:

@H_450_2@myVar.myProperty = something

这一行相当于:

@H_450_2@myVar!.myProperty = something

因此,如果myVar为零,那么我们将崩溃该程序.

结论:

使用这些选项中的任何一个(或根本不使用可选项)我们告诉@L_773_27@myVar关于myVar的事情,因为语言强制或不强迫您处理myVar的方式.

?可选的var myVar:Class? =零:

如果我用的话?可选的,我们基本上强迫用户总是检查nil.

!可选的var myVar:Class! =零:

如果我们使用!然后,如果myVar为nil,则出现问题并且我们应该使程序崩溃,但是,用户仍然可以选择处理nil情况,如果用户是应该分配myVar的用户,则该选项特别有用.一个很好的用例是网络请求.

没有可选的var myVar = Class():

在任何方面都没有使用可选(显然)变量总是在那里,我们不需要担心它是零.

大佬总结

以上是大佬教程为你收集整理的ios – UIViewController变量初始化全部内容,希望文章能够帮你解决ios – UIViewController变量初始化所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。