gpt4 book ai didi

swift - CustomStringConvertible 崩溃枚举?

转载 作者:行者123 更新时间:2023-11-28 13:40:24 24 4
gpt4 key购买 nike

我在 XCode playground 中为我的 enum 使用 CustomStringConvertible 时遇到了一个非常奇怪的问题。

请参阅以下枚举:

enum A {
case v(UInt8)

init(val: UInt8) {
self = .v(val)
}
}

var a = A(val: 5)
print("\(a)")

此代码没有任何问题,a 将等于 .v(5)

在那之后,我试图让这个类符合CustomStringConvertible。所以,我实现了 description 计算属性:

enum A {
case v(UInt8)

init(val: UInt8) {
self = .v(val)
}

var description: String {
return "\(self)"
}
}

var a = A(val: 5)
print("\(a) \(a.description)")

一切仍然按预期进行。然后我在声明中添加了协议(protocol)一致性:

enum A: CustomStringConvertible {
case v(UInt8)

init(val: UInt8) {
self = .v(val)
}

var description: String {
return "\(self)"
}
}

var a = A(val: 5)
print("\(a) \(a.description)")

奇怪的是,现在我遇到了段错误。尽管我是 swift 的初学者,但我觉得这个问题很有趣,而且我从未见过协议(protocol)一致性声明会导致这个问题。

知道为什么会这样吗?

最佳答案

字符串插值(如在 "\(self)" 中)为符合 CustomStringConvertible 协议(protocol)的类型的值调用 description 属性.

这意味着您的 var description 实现递归调用自身,最终导致堆栈溢出并终止程序。

关于swift - CustomStringConvertible 崩溃枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56114023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com