【发布时间】:2015-06-28 07:24:39
【问题描述】:
我刚开始学习 Swift,最近发现了
-
“普通”变量(因为没有更好的名称):
例如:
var test1: String -
“可选”变量
例如:
var test2: String? -
“隐式展开的可选”
例如:
var test3: String! -
惰性变量
例如:
lazy var test4: String
我的理解是这样的:
使用“可选”变量 (?) 当变量可能会或可能不会在未来从初始化开始的某个时间点进行初始化时
在保证初始化变量时使用“隐式解包选项” (!)
-
选项可以通过“强制展开”
转换为隐式展开的选项例如:
let possibleString: String? = "Hello" println(possibleString!) -
在初始化之前不需要设置某些东西时使用“惰性变量”(似乎这些可以与 (?) 或 (!) 一起使用)
因此,我的问题是:
何时使用选项 1 - 不带 的变量?并且没有!
什么时候使用“懒惰”
我读到“懒惰”经常用于singletons - 为什么?
我在 Java 和 C++ 术语方面拥有最丰富的经验,如果这有助于我的回答背景。
编辑:这是我发现的所有内容(主要问题是 "Normal" 与 "Implicitly Unwrapped Optionals":
- “普通”变量必须初始化:(a)在同一行,(b)在使用前(使用是指对对象的某些操作)在同一范围内,(c)在init iff 变量是一个字段。 注意:init 的范围是类范围内的所有内容,而不是类内函数范围内的所有内容。
- 打印隐式展开的可选选项将打印“nil”,但使用变量的函数会引发运行时异常。同时,使用(包括打印)Normal 变量根本不允许程序编译
- 使用目的! over "" (Nothing) 是 (a) 更宽松,因为程序将编译(并在变量实际初始化的情况下正确运行)和 (b) 让您不在一开始就初始化所有内容。 注意:如果是Normal变量,任何字段未声明都是编译时错误。
【问题讨论】:
标签: ios iphone swift variables optional