【发布时间】:2017-08-11 21:45:07
【问题描述】:
标题:super.init()调用的描述
这是对旧问题的新看法。作为一个主要的 Swift 程序员,我倾向于不使用 NSObject 来定义类,因为 Objective-C 的残余副作用。就像如果我有一个名为 length 的只读属性,然后我想创建一个名为 setLength 的 setter 函数,我会收到有关它与 Objective- 中的类似定义冲突的警告 - C。我刚刚发现了 set(var){} 设置器。如果我将继承自 NSObject 的 Cacoa 类(如 UIDocument 等)子类化,我必须忍受这些副作用。
我有一个在属性定义中使用其他两个类的类,它们都不是 NSObjects。该类有一个 description 计算变量,该变量使用 description 计算变量用于其组成中的其他两个类。所有三个类都需要符合 CustomStringConvertable 协议。好的,一切都很好。
在某些时候,此类升级为 UIDocument,而 CustomStringConvertable 变得多余并被删除。一切仍然有效。
这是我今天发现的。我想在程序中打印两个属性之一的地方打断,为了方便起见,我在该类的描述变量中设置了断点,认为它应该只在我感兴趣的地方调用,打印出来的地方。我发现在 UIDocument 子类的所有 super.init() 过程中都会调用描述变量!其中有几个。我认为组合字符串相对昂贵,但并不在意,因为它们仅用于调试,但随着它们被调用并且谁知道它们在 super.init() 中如何使用,我需要更改它。
我在同一个程序中检查了另一个 UIDocument 类,它有 200 个与之关联的文件,它还在 super.init() 中调用描述。
是否有人对使用 description 与 debugDescription 的最佳实践有任何意见?
我将根据文档回答我自己的问题。
【问题讨论】: