Swift - 使用let可选

loz*_*lan 13 initialization constants optional swift

我正在学习Swift.在第一印象中,我无法看到任何声明常量(没有初始存储值)作为类中的可选项的点...例如

let userName: String?
Run Code Online (Sandbox Code Playgroud)

因为默认初始值设定项会将其分配给nil,并且随后无法更改(因为它是常量).

据我了解,自定义初始化程序仍然可以为它分配一个非零值,但在这种情况下你不会只是声明它let userName: String(即非可选)

我本以为如果它是一个多余的模式,苹果会提到它,但我看不出它们有......所以在什么情况下可选的常量声明会被使用或有用?

Dun*_*n C 23

在init过程中需要为可选的常量赋值.该值可以是零或其他值.一旦分配,它就会陷入该值.nil就像是"这个属性故意留空"指示器,用永久墨水书写.

假设您有一个充满来自网络请求的响应数据的类.您获得的某些字段可能为零,或者它们可能包含数据.

您编写的代码解析来自服务器的响应并构建响应对象.响应对象的每个属性都是固定的.如果您获得该属性的信息,则它包含数据,或者为零.

在这种情况下,使用可选常量非常有意义.

您将为响应对象编写一个init方法,该方法将接受网络回复(例如,在JSON中)并填写响应对象的属性.如果缺少JSON数据中的给定标记,则将该属性设置为nil.您使用常量,因为一旦响应对象初始化,该值就会被修复.如果它是零,它将永远是零.如果它包含值,则它将始终包含该值,并且无法更改.


roy*_*yl8 6

如果没有提供初始值,只有可选变量会自动设置为 nil


T 类型的可选常量?不会自动设置为 nil
它需要使用 T 或 nil 类型的值手动初始化

  • 如果使用前没有手动初始化,会抛出“constant used before being initialised”错误

  • 类似地,如果一个类有一个可选的常量属性而没有显式地手动初始化它并且也没有构造,则会抛出错误“类没有初始化器”