为什么有命名空间的我们仍然需要命名空间?
首先,同 module
内定义扩展同名的函数,此时会报Invalid redeclaration of 'xxfun()'
,而不同 module
是没有问题的。
但是我们会出现一个情况,就是不同 module
扩展了同名函数,那么我如果想使用另一个 module
定义的同名函数,这时是没有办法做到的,所以我们增加了一个 Wrapper
。
这里还有几个注意点:
- 优先使用泛型而不是
Any
等 - 扩展泛型协议,可以使用
Self
代替直接的类型
代码
struct HX<Base> {
let base: Base
init(_ base: Base) {
self.base = base
}
}
protocol HXCompatible {
associatedtype HXBase
var hx: HX<HXBase> { get set }
static var hx: HX<HXBase>.Type { get set }
}
extension HXCompatible {
var hx: HX<Self> {
get {
return HX(self)
}
// swiftlint:disable:next unused_setter_value
set {
}
}
static var hx: HX<Self>.Type {
get {
return HX<Self>.self
}
// swiftlint:disable:next unused_setter_value
set {
}
}
}
extension NSObject: HXCompatible {}