Swift:静态字符串评估为空

Ofr*_*fri 5 null static swift

我在 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"
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

正如您所看到的,CONTACT_NAME即使它被定义为public static let

如何解决这个问题?

Yur*_*hev 4

正如《Swift 编程语言指南》中所说:

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

所以你的常量不是空的,它当时还没有被实例化,因为你以前从未访问过它。

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

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

//_ = MyStruct.ID

print(MyStruct.ID)
Run Code Online (Sandbox Code Playgroud)

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

如果您取消注释注释行并重复相同的操作,MyStruct.ID则行断点处不会为空print,因为当您在上一行中访问它时它已经被实例化。