【发布时间】:2019-11-05 11:41:14
【问题描述】:
我正在开始一个新的 iOS Swift 项目。我需要添加一些所有项目类都应该继承的功能。与Objective C 不同,并非Swift 中的所有类都继承自任何特定类,即NSObject。例如,
我无法创建 Any 或 AnyObject 类的扩展,就像我可以创建 NSObject 一样。比如下面的代码就OK了。
extension NSObject {
@objc var classTag: String {
return String(describing: type(of: self))
}
}
但是,AnyObject 上的扩展会导致编译器错误,
不能扩展非标称类型'AnyObject'
所以,我决定让我的项目中的所有 swift 类都继承自 BaseClass,而 BaseClass 实际上是继承自 NSObject。
class BaseClass: NSObject {
@objc var classTag: String {
return String(describing: type(of: self))
}
}
和其他类,即
class OtherClass: BaseClass {
// have classTag
}
在我为我的团队制定策略,从BaseClass 继承所有类之前,我想知道默认从NSObject 继承所有类是否有一些缺点。
【问题讨论】:
-
你应该改用协议和结构
-
如果您使用 Swift 编程,我认为任何类都绝对没有理由从 NSObject 继承,除非有一些特殊的依赖项需要它。为什么还要将您的设计锁定为所有类都有一个超类?
-
@JoakimDanielson 正如我所说,我可能需要强加我的项目类的一些通用功能。 classTag 只是一个例子。甚至可能是为了未来。
标签: ios swift inheritance nsobject swift-protocols