Swift: статическая строка оценивается пустой - PullRequest
0 голосов
/ 07 сентября 2018

Я искал это на 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 голосов
/ 07 сентября 2018

As Руководство по языку программирования Swift говорит:

Глобальные константы и переменные всегда вычисляются лениво, аналогично Lazy Stored Properties. В отличие от отложенных хранимых свойств , глобальные константы и переменные не должны быть отмечены модификатором lazy.

То есть ваша константа не пуста, она просто не была создана в тот момент, потому что вы никогда не обращались к ней раньше.

Такое поведение не может привести к каким-либо проблемам. Вот пример:

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

//_ = MyStruct.ID

print(MyStruct.ID)

Если вы запустите этот код и добавите точку останова в строке print, вы также увидите, что MyStruct.ID пусто, но правильное значение будет напечатано на консоли, потому что константа была создана после первый доступ.

Если вы раскомментируете закомментированную строку и повторяете то же самое, MyStruct.ID не будет пустым в print точке останова строки, потому что она уже была создана при обращении к ней в предыдущей строке.

...