我在 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
如何解决这个问题?
正如《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,因为当您在上一行中访问它时它已经被实例化。
| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |