大佬教程收集整理的这篇文章主要介绍了swift – 你能装饰一个破坏调试的函数来代替调用该函数的位置吗?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
func mustOverride(callSite:string = #function) -> Never { preconditionFailure("\(callSitE) must be overridden in a subclass") }
我们使用它来制作虚假抽象类,如下所示:
// Faux 'abstract' class class SoundBase { func play(){ mustOverride() } } // 'Concrete' class class CatSound : SoundBase { override func play(){ // play cat 'meow' sound } }
如上所述,如果直接实例化SoundBase并调用play(),则会触发mustOverride()函数,该函数在可调试状态下中断.问题是它在mustOverride()函数内断开,而不是在调用站点play().
@H_133_5@microsoft的.NET有一个简洁的功能,您可以使用属性来修饰函数,以更改它们与调试器的交互方式(see here了解更多信息).例如,它们有一个DebuggerHidden属性,如果应用于mustOverride(),会导致调试器在调用play()函数内部而不是在mustOverride()内部,这样可以避免不必要的调用栈之类的操作.上一层找出错误的真正位置.
我想知道Swift是否有类似这种能力的东西.如果使用得当,它真的很棒.
@_transparent
属性.这是在行动:
@_transparent func mustOverride(callSite: String = #function) -> Never { preconditionFailure("\(callSitE) must be overridden in a subclass") } class SoundBase { func play(){ mustOverride() } } class CatSound: SoundBase { override func play() {} } SoundBase().play()
从文档:
注意:
>由于@_transparent以下划线开头,因此将来可能会发生变化
以上是大佬教程为你收集整理的swift – 你能装饰一个破坏调试的函数来代替调用该函数的位置吗?全部内容,希望文章能够帮你解决swift – 你能装饰一个破坏调试的函数来代替调用该函数的位置吗?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。