我声明如下:
@IBOutlet var hw_label : UILabel!
如果我像上面那样写就可以成功运行,
但是当我声明如下时:
@IBOutlet var hw_label : UILabel!
and
hw_label.text = "Hello World"
It display error as Image.
我只是想知道 '!' 之间有什么区别和 '?'。
或者为什么我们必须使用这个..?
Swift 中有两种类型的变量。
- 可选变量
- 普通(非可选)变量
可选变量:
最短的描述是可选变量/对象包含属性“object-returns-nil-when-non-exist”。在 objC 中,我们创建的几乎所有对象都只是可选变量。也就是说,对象具有“对象不存在时返回 nil”属性的行为。然而,这种特定的行为并不总是需要的。因此,为了识别选项,符号“?”和 '!'已经用过。同样有两种类型的选项......
正常选项:
var normalOptional : String?
隐式展开的选项:
var specialOptional : String!
两者都具有“可选”行为,但区别在于“隐式解包可选”也可以用作普通(非可选)值。
例如,默认 tableview 委托方法在 function(cellForRowAtIndex) 参数列表中声明了 indexPath 变量。当调用 cellForRowAtIndex 时,行值存在。其中,indexPath 变量在函数(cellForRowAtIndex) 参数列表中声明。
因此,从“indexPath”中解包“row”值如下。
var rowValue = indexPath?.row // variable rowValue inferred as optional Int value
or
var rowValue = indexPath!.row// variable rowValue inferred as normal Int value
注意:当使用'!'时展开,必须非常确定特定的类存在(包含值)。
希望这个链接能给你更多的想法。swift 中可选变量/常量的预期用途是什么 https://stackoverflow.com/questions/24163716/what-is-the-intended-use-of-optional-variable-constant-in-swift
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)