代码之家  ›  专栏  ›  技术社区  ›  Ofri

Swift:静态字符串计算为空

  •  3
  • Ofri  · 技术社区  · 6 年前

    我找了这个,不幸的是没有答案。

    我宣布:

    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 回复  |  直到 6 年前
        1
  •  3
  •   Yury Imashev    6 年前

    The Swift Programming Language Guide

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

    所以你的常数不是空的,它不是简单的 实例化 因为你以前从未接触过。

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

    struct MyStruct {
        public static let ID = "Identifier"
    }
    
    //_ = MyStruct.ID
    
    print(MyStruct.ID)
    

    如果运行此代码并在 print 行,你也会看到 MyStruct.ID 是空的,但控制台将打印正确的值,因为常量已实例化 之后 第一次进入。

    如果取消注释注释行并重复相同的操作, 不会是空的 打印 行断点,因为当您在前一行中访问它时,它已经被实例化。