Значения структур меняются при добавлении в массив с типом протокола - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть протокол и некоторые структуры, которые ему соответствуют, в основном в формате, показанном ниже. Я сталкиваюсь с проблемой, когда при добавлении различных структур в массив типа [Protocol] значения структур меняются странным образом. Однако, если я изменю тип массива на [Struct1] или [Struct2] и добавлю только соответствующие типы, проблем не будет.

protocol Protocol {
    var id: String { get set }
    var name: String { get set }
}

struct Struct1: Protocol {
    var id: String = "1"
    var name: String = "Struct1"
    var uniqueProperty1: String = "uniqueProperty1"
}

struct Struct2: Protocol {
    var id: String = "2"
    var name: String = "Struct2"
    var uniqueProperty2: String = "uniqueProperty2"
}

var structs: [Protocol] = []
let struct1 = Struct1()
let struct2 = Struct2()
structs.append(struct1)
structs.append(struct2)

И я должен добавить, что приведенный выше код работает, как и ожидалось. Это мой проект, который имеет протокол и некоторые структуры, которые ведут себя странно. Что может быть причиной этой проблемы?

1 Ответ

0 голосов
/ 08 апреля 2019

Я обнаружил, что если вы посмотрите на значение элемента в массиве типа [Protocol] в Variables View в Debug Area, вполне возможно, что оно не будет отражать фактические значения этого элемента.

Вот пример:

enter image description here

Вы можете видеть, что itemsList в cards[2] равно nil, но когда я распечатываюТо же значение в Debugger Output из Console, это не ноль (имеет длину 4):

(lldb) po (cards[2] as? RBListCard)?.itemsList?.count
▿ Optional<Int>
  - some : 4

Я предполагаю, что мораль этой истории заключается в том, чтобы не доверять показанным ценностямв пределах Variables View.

...