Swift - 使用可选的 let
Swift - use of optional with let
我在学习Swift。在第一印象中,我看不出在 class
中将常量(没有初始存储值)声明为可选值有任何意义
例如:
let userName: String?
因为默认初始化程序会将其分配给 nil
并且随后无法更改(因为它是常量)。
据我了解,自定义初始化程序仍然可以为其分配一个非零值,但在那种情况下,您不会将其声明为 let userName: String
(即非可选)
我原以为如果这是一个冗余模式,Apple 会提到它,但我看不到他们有。那么在什么情况下会使用或有用 Optional
常量声明?
如果你要输入一个文字并将其设为可选,那么可选部分是无用的,因为你知道 number
将成为 1
let number: Int? = 1
但是,如果您想复制另一个对象的常量副本,而您不知道源是否为 nil,那就是。
var array = ["hello"]
let string: String? = array[1]
// string is nil, so you can do some checking with it
上面的例子并没有完全说明我的观点,但假设 array
是一个可变数组,你可能会偶尔删除和添加值(如果你正在检查,你可能会得到一个 nil 值) “1”索引)
可选常量需要在初始化过程中赋值。该值可以是零,或其他一些值。一旦分配,它就会停留在该值。 nil 就像一个 "this property intentionally left blank" 指标,用永久性墨水书写。
假设您有一个 class,其中填充了来自网络请求的响应数据。您返回的某些字段可能为零,或者它们可能包含数据。
您编写代码来解析来自服务器的响应并构建响应对象。响应对象的每个 属性 都是固定的。如果您获得了 属性 的信息,它要么包含数据,要么没有。
在这种情况下,使用可选常量是完全合理的。
您将为您的响应对象编写一个 init 方法,该方法将接收网络回复(例如在 JSON 中)并填写响应对象的属性。如果 JSON 数据中的给定标签丢失,您可以将 属性 设置为 nil。您使用常量是因为一旦响应对象被初始化,该值就固定了。如果它为零,它将永远为零。如果它包含一个值,它将始终包含该值并且无法更改。
如果没有提供初始值,只有可选变量会自动设置为 nil
T 类型的可选常量?不会自动设置为 nil
它需要用类型 T 或 nil
的值手动初始化
如果在使用前没有手动初始化,会报错"constant used before being initialised"
类似地,如果 class 有一个可选常量 属性 而没有显式手动初始化它并且也没有构造,则会抛出错误 "class has no initialisers"
我在学习Swift。在第一印象中,我看不出在 class
中将常量(没有初始存储值)声明为可选值有任何意义例如:
let userName: String?
因为默认初始化程序会将其分配给 nil
并且随后无法更改(因为它是常量)。
据我了解,自定义初始化程序仍然可以为其分配一个非零值,但在那种情况下,您不会将其声明为 let userName: String
(即非可选)
我原以为如果这是一个冗余模式,Apple 会提到它,但我看不到他们有。那么在什么情况下会使用或有用 Optional
常量声明?
如果你要输入一个文字并将其设为可选,那么可选部分是无用的,因为你知道 number
将成为 1
let number: Int? = 1
但是,如果您想复制另一个对象的常量副本,而您不知道源是否为 nil,那就是。
var array = ["hello"]
let string: String? = array[1]
// string is nil, so you can do some checking with it
上面的例子并没有完全说明我的观点,但假设 array
是一个可变数组,你可能会偶尔删除和添加值(如果你正在检查,你可能会得到一个 nil 值) “1”索引)
可选常量需要在初始化过程中赋值。该值可以是零,或其他一些值。一旦分配,它就会停留在该值。 nil 就像一个 "this property intentionally left blank" 指标,用永久性墨水书写。
假设您有一个 class,其中填充了来自网络请求的响应数据。您返回的某些字段可能为零,或者它们可能包含数据。
您编写代码来解析来自服务器的响应并构建响应对象。响应对象的每个 属性 都是固定的。如果您获得了 属性 的信息,它要么包含数据,要么没有。
在这种情况下,使用可选常量是完全合理的。
您将为您的响应对象编写一个 init 方法,该方法将接收网络回复(例如在 JSON 中)并填写响应对象的属性。如果 JSON 数据中的给定标签丢失,您可以将 属性 设置为 nil。您使用常量是因为一旦响应对象被初始化,该值就固定了。如果它为零,它将永远为零。如果它包含一个值,它将始终包含该值并且无法更改。
如果没有提供初始值,只有可选变量会自动设置为 nil
T 类型的可选常量?不会自动设置为 nil
它需要用类型 T 或 nil
如果在使用前没有手动初始化,会报错"constant used before being initialised"
类似地,如果 class 有一个可选常量 属性 而没有显式手动初始化它并且也没有构造,则会抛出错误 "class has no initialisers"