gpt4 book ai didi

swift - 如何将 self.dynamicType 变成类型别名

转载 作者:行者123 更新时间:2023-11-28 06:20:47 25 4
gpt4 key购买 nike

基本上我想为 UIViewController 或任何其他默认的 swift 类添加一个类型别名。这背后的原因是我想抽象我的代码,这样我就可以通过使用 this 而不是 self.dynamicType

来访问一些静态函数
extension UIViewController {
typealias this = TheClassThatSubclassedThis
}

class DetailViewController: UIViewController {
func doStuff() {
this.doStaticStuff()
}

static func doStaticStuff() {
...
}
}

我知道这可以通过创建一个协议(protocol)实现,然后只需将所述协议(protocol)实现到我想要实现它的类,就像这样

protocol CanAccessStaticSelf {
typealias this
}

class DetailVC: UIViewController, CanAccessStaticSelf {
typealias this = DetailVC
}

但是有没有更有效的方法来做到这一点?例如,通过继承某个类或扩展父类(super class)?

比如这样

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)
}
}

最佳答案

试试这个:

protocol CanAccessStaticSelf {
typealias this = Self
}

...但是您想要实现的目标让我有些困惑;-(


感谢this proposal from Erica Sadun在不久的将来,我们都可以使用 Self 关键字。

例如:

class MyClass {
static func staticMethod() { ... }
func instanceMethod() {
MyClass.staticMethod()
Self.staticMethod()
}
}

关于swift - 如何将 self.dynamicType 变成类型别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43538278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com