Нижний индекс структуры не устанавливает значения при создании как неявно развернутый необязательный

Почему я не могу изменить массив «numbers» с помощью подписок, когда «Foo» является неявно развернутым необязательным?

struct Foo {
    var numbers = [0,0,0]
    subscript(index: Int) -> Int {
        get { return self.numbers[index] }
        set { self.numbers[index] = newValue }
    }
}


var fooA:Foo!
fooA = Foo()

fooA[1] = 1              // does not change numbers array
fooA[1]                  // returns 0

fooA.numbers[1] = 1      // this works
fooA[1]                  // returns 1

var fooB:Foo!
fooB = Foo()

fooB![1] = 1              // this works
fooB![1]                  // returns 1

По какой-то причине это работает, когда я делаю "Foo" классом (называемым "Goo" ниже)

class Goo {
    var numbers = [0,0,0]
    subscript(index: Int) -> Int {
        get { return self.numbers[index] }
        set { self.numbers[index] = newValue }
    }
}

var goo:Goo!
goo = Goo()

goo[1] = 1              // this works
goo[1]                  // returns 1

Ответы на вопрос(1)

Ваш ответ на вопрос