首页 > 解决方案 > 包含 UUID 的结构的奇怪调试行为

问题描述

考虑这个结构:

struct test
{
    var id:UUID = UUID()
    var name:String = ""
}

执行以下代码行时:

var myTest : test?

调试器正确显示 myTest = nil

然后我执行:

myTest = test()

调试器仍然显示 MyTest = nil

如果我从结构中删除 id 变量,调试器会正确显示 myTest 的值。

似乎每当我在结构中有一个 UUID 时,它都会这样做。

这是 Xcode11 中的错误,还是我遗漏了什么?

这是在声明 myTest 按预期显示为 nil 后的屏幕截图:

在此处输入图像描述

这是将 myTest 设置为 test() 并打印后的屏幕截图。可以看到打印显示了初始化的结构,但是调试窗口仍然显示 myTest 为 nil:

在此处输入图像描述

标签: iosswiftxcode11

解决方案


我不确定您为什么认为这是意外行为。如果你有一个这样的结构:

struct test {
    var name: String = ""
}

通过这样做

var myTest: test?

myTest = test()

print(myTest)

结果:Optional(__lldb_expr_7.test(name: ""))

即使您要像这样添加 UUID:

struct test {
    var id: UUID = UUID(uuid: UUID_NULL)
    var name: String = ""
}

并做了同样的事情

var myTest: test?
myTest = test()
print(myTest)

结果:Optional(__lldb_expr_9.test(id: 00000000-0000-0000-0000-000000000000, name: ""))

你仍然得到结构

如果你有这样的结构

struct test {
    var id: UUID = UUID(uuid: UUID_NULL)
    var name: String = ""
    var lastName: String = ""
}

并且仍然做了同样的事情......

var myTest: test?

myTest = test()

print(myTest)

结果:Optional(__lldb_expr_11.test(id: 00000000-0000-0000-0000-000000000000, name: "", lastName: ""))

你仍然得到结果...

结果都是结构中定义的空字符串或空字符串...

然后我们可以像这样附加到结构

var myTest: test?

myTest = test(id: some_UUID_Number_Here, name: "Jack", lastName: "Sparrow")

print(myTest as Any)

结果:Optional(__lldb_expr_3.test(id: BBDD802E-8976-4D93-A6E2-1D43442EA9CD, name: "Jack", lastName: "Sparrow"))

希望这可以帮助...


推荐阅读