Swift:静态字符串评估为空

时间:2018-09-07 07:42:26

标签: swift static null

我在SO上寻找此消息,很遗憾,没有答案。

我已声明:

struct ChatRoomsLite {
    public static let CHAT_ROOM_LITE_BASE = "ChatRoomsLite"
    public static let TIME_OF_LAST_MESSAGE = "timeLastMessage"
    public static let NUM_OF_UNREAD_MSGS = "unreadMessages"
    public static let LAST_MESSAGE = "lastMessage"
    public static let CONTACT_ID = "contactB_Id"
    public static let CONTACT_NAME = "contactName"
}

由于某种原因,其中一个常量正在被评估为空!

enter image description here

如您所见,即使CONTACT_NAME被定义为public static let

,也被评估为空。

如何解决?

1 个答案:

答案 0 :(得分:2)

The Swift Programming Language Guide说:

  

全局常量和变量总是以与惰性存储属性类似的方式延迟计算。与lazy stored properties不同,全局常量和变量不需要使用惰性修饰符进行标记。

因此您的常量并不为空,由于您之前从未访问过它,因此当时还没有实例化

这种行为不会导致任何问题。这是一个示例:

struct MyStruct {
    public static let ID = "Identifier"
}

//_ = MyStruct.ID

print(MyStruct.ID)

如果运行此代码并在print行添加断点,您还将看到MyStruct.ID为空,但是会在控制台上打印正确的值,因为实例化了常量 后的访问。

如果您取消注释该注释行并重复相同的操作,则MyStruct.IDprint行断点处将不会为空,因为在上一行中访问该断点时已对其进行实例化。