在将协议类型附加到数组时,结构的值发生变化

时间:2019-04-08 00:16:06

标签: swift protocols

我有一个协议,以及一些符合该协议的结构,基本上采用以下格式。我面临一个问题,如果我将不同的结构附加到类型[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 :(得分:0)

我发现,如果您查看TestApp.CustomControls.Classes.TestControl[Protocol]内类型为Variables View的数组中某个元素的值,则可能无法反映该元素的实际值。

这是一个例子:

enter image description here

您可以看到Debug Area中的itemsListcards[2],但是当我在nil的{​​{1}}中打印相同的值时,不是零(长度为4):

Debugger Output

我想这个故事的寓意是不相信Console中显示的价值。