如何将 self.dynamicType 变成类型别名
How to make self.dynamicType into a typealias
基本上我想为 UIViewController
或任何其他默认 swift classes 添加类型别名。这背后的原因是我想抽象我的代码,这样我就可以通过使用 this
而不是 self.dynamicType
来访问一些静态函数
extension UIViewController {
typealias this = TheClassThatSubclassedThis
}
class DetailViewController: UIViewController {
func doStuff() {
this.doStaticStuff()
}
static func doStaticStuff() {
...
}
}
我知道这可以通过创建 protocol
实现,然后只需将所述协议实现到 class 我想实现它,就像这样
protocol CanAccessStaticSelf {
typealias this
}
class DetailVC: UIViewController, CanAccessStaticSelf {
typealias this = DetailVC
}
但是有没有更有效的方法来做到这一点?例如,通过 subclassing 某个 class 或扩展 superclass?
例如这样
extension UIViewController {
public static var defaultNibName: String {
return self.description().componentsSeparatedByString(".").dropFirst().joinWithSeparator(".")
}
}
class DetailVC: UIViewController, CanAccessStaticSelf {
func doSomeStuffAgain() {
// no other code just subclass and I can access self.dynamicType as just `this`
print(this.defaultNibName)
}
}
无法通过此访问。
但您可以通过 "UIViewController.defaultNibName".
访问
试试这个:
protocol CanAccessStaticSelf {
typealias this = Self
}
...但是您想要实现的目标让我有些困惑;-(
感谢 this proposal from Erica Sadun 我们都可以在不久的将来使用 Self
关键字。
例如:
class MyClass {
static func staticMethod() { ... }
func instanceMethod() {
MyClass.staticMethod()
Self.staticMethod()
}
}
基本上我想为 UIViewController
或任何其他默认 swift classes 添加类型别名。这背后的原因是我想抽象我的代码,这样我就可以通过使用 this
而不是 self.dynamicType
extension UIViewController {
typealias this = TheClassThatSubclassedThis
}
class DetailViewController: UIViewController {
func doStuff() {
this.doStaticStuff()
}
static func doStaticStuff() {
...
}
}
我知道这可以通过创建 protocol
实现,然后只需将所述协议实现到 class 我想实现它,就像这样
protocol CanAccessStaticSelf {
typealias this
}
class DetailVC: UIViewController, CanAccessStaticSelf {
typealias this = DetailVC
}
但是有没有更有效的方法来做到这一点?例如,通过 subclassing 某个 class 或扩展 superclass?
例如这样
extension UIViewController {
public static var defaultNibName: String {
return self.description().componentsSeparatedByString(".").dropFirst().joinWithSeparator(".")
}
}
class DetailVC: UIViewController, CanAccessStaticSelf {
func doSomeStuffAgain() {
// no other code just subclass and I can access self.dynamicType as just `this`
print(this.defaultNibName)
}
}
无法通过此访问。 但您可以通过 "UIViewController.defaultNibName".
访问试试这个:
protocol CanAccessStaticSelf {
typealias this = Self
}
...但是您想要实现的目标让我有些困惑;-(
感谢 this proposal from Erica Sadun 我们都可以在不久的将来使用 Self
关键字。
例如:
class MyClass {
static func staticMethod() { ... }
func instanceMethod() {
MyClass.staticMethod()
Self.staticMethod()
}
}