【问题标题】:Values of structs changing when appending to array with protocol type附加到具有协议类型的数组时结构的值发生变化
【发布时间】:2019-04-08 00:16:06
【问题描述】:

我有一个协议,以及一些符合它的结构,基本上如下所示的格式。我面临一个问题,如果我将不同的结构附加到[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)

我应该补充一点,上面的代码按预期工作。这是我的项目,它有一个协议和一些结构,但是行为很奇怪。什么可能导致此问题?

【问题讨论】:

  • 如果发布的代码有效,那么将很难提供帮助。您需要发布实际演示该问题的代码。至少edit你的问题是澄清价值观的变化方式。
  • 感谢您愿意提供帮助,我发现了问题并发布了答案。
  • 您仍然需要在问题中发布代表并实际描述问题的详细信息。
  • 我应该删除问题吗?我不知道如何编辑它,因为事实证明这是 Xcode 的Variables View 的问题。

标签: swift protocols


【解决方案1】:

我发现,如果您在 Variables View 中查看 [Protocol] 类型数组中的元素的值 Debug Area ,它可能不会反映该元素的实际值。

这是一个例子:

你可以看到cards[2]中的itemsListnil,但是当我在ConsoleDebugger Output中打印出相同的值时,它不是nil(长度为4):

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

我猜这个故事的寓意是不要相信 Variables View 中出现的价值观。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2021-11-06
    • 1970-01-01
    • 2016-11-09
    相关资源
    最近更新 更多