结构的下标在创建为隐式展开的可选项时不会设置值

时间:2015-12-02 18:51:12

标签: swift class struct swift2 optional

为什么我无法更改"数字" " 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 个答案:

答案 0 :(得分:1)

它看起来像一个错误(或者我错过了一些重要的东西),请查看

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


var fooA:Foo! = Foo()
// here is the difference
fooA?[1] = 1
fooA[1]                  //  1
fooA.numbers[1] = 1
fooA[1]                  //  1

更多'复杂'实验

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


var fooA:Foo! = Foo()

fooA[1] = 1
fooA[1]                  // 0
// but prints
// 0 1
// 1

了解更多' fun'

var fooA:Foo! = Foo()
if var foo = fooA {
    foo[1] = 1
    print(foo)
}

打印

"Foo(numbers: [0, 1, 0])\n"