Swift文档说在扩展中添加初始化器是可能的,文档中的示例是关于向 struct 添加初始化器的。Xcode无法识别UIColor
在我的便利初始化器中指定的初始化器:
extension UIColor {
convenience init(rawValue red: CGFloat, green g: CGFloat, blue b: CGFloat, alpha a: CGFloat) {
// Can not find out the designated initializer here
self.init()
}
}
有什么办法吗?
3条答案
按热度按时间dauxcl2d1#
你不能这样做,你必须选择不同的参数名来创建你自己的初始化器/你也可以让它们通用以接受任何BinaryFloatingPoint或BinaryFloatingPoint类型:
bcs8qyzn2#
好吧,如果你真的,真的,真的想覆盖一个初始化器,有一个方法。
在您进一步阅读之前:永远不要这样做来 * 改变 *
UIKit
行为。为什么?它可能会让那些不明白为什么UIColor
初始化器没有正常工作的人感到困惑。仅在修复UIKit
错误或添加功能等情况下执行此操作。我已经使用以下方法修补了几个iOS bug。
代码
说明
这是使用Swift调用的J2EE-C的动态特性,在运行时交换方法定义指针。如果您不知道这意味着什么,或者它的含义,那么在使用这段代码之前阅读一下这个主题可能是一个好主意。
ua4mk5z43#
更改参数类型也将起作用。
用法:
我通常会忘记将组件值除以255的冗余工作。所以我做了这个方法来方便我。