基本上我想为UIViewController
或任何其他默认的swift类添加一个typealias。这背后的原因是我想抽象我的代码,以便我可以通过使用this
代替self.dynamicType
来访问一些静态函数
extension UIViewController {
typealias this = TheClassThatSubclassedThis
}
class DetailViewController: UIViewController {
func doStuff() {
this.doStaticStuff()
}
static func doStaticStuff() {
...
}
}
我知道这可以通过创建protocol
来实现,然后只需要将实现所述协议实现到我要实现它的类中,就像这样
protocol CanAccessStaticSelf {
typealias this
}
class DetailVC: UIViewController, CanAccessStaticSelf {
typealias this = DetailVC
}
但有更有效的方法吗?例如,只是通过子类化某个类或扩展超类?
像这样的例子
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)
}
}
答案 0 :(得分:1)
请改为尝试:
protocol CanAccessStaticSelf {
typealias this = Self
}
......但是你想要达到的目标看起来有些令我困惑; - (
感谢this proposal from Erica Sadun我们所有人都可以在不久的将来使用Self
关键字。
例如:
class MyClass {
static func staticMethod() { ... }
func instanceMethod() {
MyClass.staticMethod()
Self.staticMethod()
}
}
答案 1 :(得分:0)
无法通过此访问。 但是你可以通过" UIViewController.defaultNibName"来访问。