gpt4 book ai didi

swift - 扩展中的 UIEdgeInset 自定义初始值设定项抛出 EXC_BAD_ACCESS

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

我有这个扩展:

extension UIEdgeInsets {

init(top: CGFloat = 0, left: CGFloat = 0, bottom: CGFloat = 0, right: CGFloat = 0) {
self.init(top: top, left: left, bottom: bottom, right: right)
}
}

扩展的目的是当参数与默认值没有区别时,不必将参数传递给 UIEdgeInsets 初始化程序。但是当自定义初始化程序运行时,会抛出一个错误:

Thread 1: EXC_BAD_ACCESS (code=2, address=0x16f997ff8)

知道为什么这段代码会导致运行时错误吗?

最佳答案

您正在导致无限递归,因为您正在从其内部调用相同的 init 方法。

并且扩展真的不应该仅仅通过提供默认参数来尝试覆盖现有的 init 或其他方法。

已经有一个init(top:,left:,bottom:,right:)。为另一个人提供相同的签名是个坏主意。

除此之外,您的主要问题是从同一 init 方法中调用 self.init

要查看问题,请添加 print 语句:

init(top: CGFloat = 0, left: CGFloat = 0, bottom: CGFloat = 0, right: CGFloat = 0) {
print("Uh-oh")
self.init(top: top, left: left, bottom: bottom, right: right)
}

作为另一个例子,创建一个类,它有一个带有一个参数的init。现在再次将相同的 init 添加到类中,但为参数提供默认值。该代码甚至无法编译。因此,即使您可以解决递归问题,尝试通过扩展来做同样的事情只会导致问题。

关于swift - 扩展中的 UIEdgeInset 自定义初始值设定项抛出 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47586035/

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