重写从函数中声明的NSObject继承的子类的函数时发生Swift编译器错误

重写从函数中声明的NSObject继承的子类的函数时发生Swift编译器错误,swift,class,compiler-errors,overriding,nsobject,Swift,Class,Compiler Errors,Overriding,Nsobject,我得到Swift编译器错误-每当我试图重写从函数中声明的NSObject继承的子类的函数时,由于信号:Segmentation fault:11“命令失败 我用不同的类和函数尝试过,我得到了所有类和函数的错误 只有在重写函数或 如果我删除NSObject,它会工作,并且不会出现错误 有人知道为什么会这样,为什么从NSObject继承会有所不同吗 例如: class ParentClass: NSObject { func returnFooString() -> String {

我得到Swift编译器错误-每当我试图重写从函数中声明的NSObject继承的子类的函数时,由于信号:Segmentation fault:11“命令失败

我用不同的类和函数尝试过,我得到了所有类和函数的错误

  • 只有在重写函数或
  • 如果我删除NSObject,它会工作,并且不会出现错误
  • 有人知道为什么会这样,为什么从NSObject继承会有所不同吗

    例如:

    class ParentClass: NSObject {
        func returnFooString() -> String {
            return "foo"
        }
    }
    
    //This Fails
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            class childClass: ParentClass {
                override func returnFooString() -> String {
                    return "bar"
                }
            }
        }
    }
    
    //This Passes
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            class childClass: ParentClass {
               func returnBarString() -> String {
                    return "bar"
                }
            }
        }
    }
    

    只有当ParentClass不从NSObject继承时,重写returnFooString函数才会通过。NSObject继承自具有自己的init方法的Cocoa类。删除NSObject时,它会变成普通的swift类,不需要Cocoa类init。这就是为什么它不给出错误的原因

    NSObject的初始化示例


    NSObject
    是从
    Cocoa类
    扩展而来的,它有自己的init方法。删除NSObject时,它会变成一个普通的swift类,不需要Cocoa类init。这就是为什么它不会给出错误

    NSObject的初始化示例


    这似乎是旧版本Swift中的一个错误。我在Swift 2.0中再次测试,现在已修复了它。这似乎是旧版本Swift中的一个错误。我在Swift 2.0中再次测试,现在已修复了它。

    是的,我知道,但我没有在上述代码中初始化任何内容?我还知道NSObject需要Cocoa类初始化,但为什么会有不同?是的,我知道,但我没有在上面的代码中初始化任何东西?我也知道NSObject需要Cocoa类初始化,但为什么会有不同?是的,我知道,但我没有在上面的代码中初始化任何东西?我也知道NSObject需要Cocoa类初始化,但为什么这有什么不同吗?
    class MyClass: NSObject {
    
        var someProperty: NSString // no need (!). It will be initialised from controller 
    
        init(fromString string: NSString) {
            self.someProperty = string
            super.init()
        }
    
        convenience override init() {
            self.init(fromString:"John") // calls above mentioned controller with default name
        }        
    }