我在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"
}
由于某种原因,其中一个常量正在被评估为空!
如您所见,即使CONTACT_NAME
被定义为public static let
如何解决?
答案 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.ID
在print
行断点处将不会为空,因为在上一行中访问该断点时已对其进行实例化。