0

它是 Swift 5.0.1 还是 Xcode 的错误?

这是在 Xcode 10.2.1 的操场上。

代码是:

extension UIColor {
    @objc class var myGolden: UIColor {
        return self.init(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.900)
    }
}
print(UIColor.myGolden)

class MyUIColor: UIColor {
    override class var myGolden: UIColor {
        return super.init(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.750)
    }
}
print(MyUIColor.myGolden)

操场上没有为班级指示任何错误MyUIColor

输出是:

UIExtendedSRGBColorSpace 1 0.894 0.541 0.9

libc++abi.dylib:以 NSException 类型的未捕获异常终止

运行时错误说:

错误:执行被中断,原因:信号 SIGABRT。进程一直停留在被中断的地方,使用“thread return -x”返回表达式求值前的状态。

4

2 回答 2

1

更改self.initandsuper.init调用来UIColor.init解决问题。在计算属性或任何其他函数中创建类的实例时,您应该只分别从便利初始化程序或子类初始化程序调用self.initand ,您应该使用类型名称而不是or来调用 init 方法。super.initselfsuper

extension UIColor {
    @objc class var myGolden: UIColor {
        return UIColor(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.9)
    }
}
print(UIColor.myGolden)

class MyUIColor: UIColor {
    override class var myGolden: UIColor {
        return UIColor(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.75)
    }
}
print(MyUIColor.myGolden)
于 2019-05-29T12:55:32.123 回答
1

问题不在于类变量覆盖,而是不正确使用self.initand super.init。您应该按如下方式更改代码:

extension UIColor {
    @objc class var myGolden: UIColor {
        return UIColor(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.900)
    }
}
print(UIColor.myGolden)

class MyUIColor: UIColor {
    override class var myGolden: UIColor {
        return UIColor(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.750)
    }
}
print(MyUIColor.myGolden)
于 2019-05-29T12:55:56.877 回答