小编req*_*zix的帖子

在Swift中,Self.Type不能直接转换为ObjectiveC类的扩展中的AnyClass

我正在尝试创建Fabric方法来创建具有正确nib名称的UIViewController(以修复iOS8默认初始化问题).要做到这一点,我添加了扩展名:

extension UIViewController {    
    class func create() -> Self {
        if #available(iOS 9.0, *) {
            return self.init()
        } else {
            let clsName = NSStringFromClass(self).componentsSeparatedByString(".").last!
            return self.init(nibName: clsName, bundle: nil)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但编译器发出错误:Cannot convert value of type 'Self.Type' to expected argument type 'AnyClass' (aka 'AnyObject.Type')in NSStringFromClass(self).

要修复它,可以添加另一个扩展方法并将代码重写为:

extension UIViewController {
    private class var nibNameForInitializer:String {
        return NSStringFromClass(self).componentsSeparatedByString(".").last!
    }
    class func create_() -> Self {
        if #available(iOS 9.0, *) {
            return self.init()
        } else {
            return self.init(nibName: self.nibNameForInitializer, …
Run Code Online (Sandbox Code Playgroud)

type-inference objective-c ios swift swift-extensions

8
推荐指数
2
解决办法
7969
查看次数