gpt4 book ai didi

ios - 什么时候使用?、!、无或惰性?

转载 作者:IT王子 更新时间:2023-10-29 05:31:49 25 4
gpt4 key购买 nike

我刚开始学习 Swift,最近才发现

  1. “正常”变量(因为缺少更好的名称):

    ex: var test1: String

  2. “可选”变量

    ex: var test2: String?

  3. “隐式展开可选”

    ex: var test3: String!

  4. 惰性变量

    例如:lazy var test4: String

我的理解是这样的:

  1. 使用“可选”变量(?)当变量可能会或可能不会在未来从初始化开始的时间点被初始化

  2. 在保证变量被初始化时使用“隐式解包选项” (!)

  3. 可选项可以通过“强制展开”

    转换为隐式展开的可选项

    例如:让可能的字符串:字符串? =“你好”
    println(possibleString!)

  4. 当在初始化之前不需要设置某些东西时使用“惰性变量”(看起来这些可以与 (?) 或 (!) 一起使用)

因此,我的问题是:

  1. 什么时候使用选项 1 - 一个不带 的变量?没有 !

  2. 什么时候用“lazy”

  3. 我读到“懒惰”通常用于 singletons - 为什么?

我在 Java 和 C++ 术语方面经验最丰富,如果这有助于我回答问题的话。

编辑:这是我发现的所有内容(主要问题是“正常” vs “隐式展开可选”:

  1. “普通”变量 必须初始化:(a) 在同一行,(b) 在使用前在同一范围内(使用意味着对对象的一些操作),(c) 通过init 结束 iff 变量是一个字段。 注意:init 的范围是类范围内的所有内容,而不是类内函数范围内的所有内容。
  2. 打印隐式展开的可选 将打印“nil”,但使用变量的函数将抛出运行时异常。同时,使用(包括 print)Normal 变量根本不允许程序编译
  3. 使用的目的! over ""(Nothing) 是 (a) 更宽容,因为程序将编译(并在变量实际初始化的情况下正确运行)和 (b) 让您不要在一开始就初始化所有内容。 注意:如果它是一个普通变量,则任何未声明的字段都是编译时错误。

最佳答案

不完全是这样。

所有变量必须在首次使用前初始化,并且所有类/结构存储的属性必须在各自的初始化程序中赋值。 Optionals 不是允许在某些时候未初始化,而是允许不包含任何值,由 nil 表示,这仍然是此类变量的完美初始化声明。因此,如果在初始化时无法知道某些内容,那么您可能会在此处使用某种可选的(例如,委托(delegate) View )。

隐式解包选项是变量可能为空的情况的一种简写,但我们绝对确定当我们真正使用它时它将保存一个实际值(典型的例子是 View Controller 中的一个属性持有对 View 的引用)。

强制解包不会将可选值转换为隐式解包的可选值,相反它会为您提供一个值,如果它存在(即如果可选值不是 nil),如果不存在则抛出异常。

惰性属性在您想要将其初始化推迟到稍后阶段的情况下使用,此时该属性实际上是第一次使用。通常的情况是,如果您需要访问昂贵的资源来执行此操作(从磁盘加载大文件,通过网络下载等),尤其是在可能根本不会使用此类属性的情况下(为什么要加载如果我们可能不使用它,可以从磁盘中获取它吗?)。

关于ios - 什么时候使用?、!、无或惰性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31097196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com