这是我的代码。似乎当我将UIColor子类化为使其等同时,我得到一个内存错误。那是为什么?
class MyColor: UIColor, Equatable {
var name: String
init(name: String, r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat = 1.0) {
self.name = name
super.init(red: r, green: g, blue: b, alpha: a)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
func == (lhs: MyColor, rhs: MyColor) -> Bool {
return lhs.name == rhs.name
}
let test1 = MyColor(name: "coolRed", r: 10, g: 12, b: 22)
let test2 = MyColor(name: "coolBlue", r: 10, g: 12, b: 22)
if test1 == test2 {
println("hey")
}
答案 0 :(得分:2)
UIColor 是一个类集群,应该避免使用子类。
您可以使用Objective-C运行时来获得所需的功能。
此片段是"游乐场准备就绪"。
import UIKit
let _nameKey = malloc(4)
extension UIColor : Equatable {
var name : String {
get {
return objc_getAssociatedObject(self, _nameKey) as! String
}
set {
objc_setAssociatedObject(self,
_nameKey,
newValue,
UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC)
);
}
}
}
public func ==(lhs: UIColor, rhs: UIColor) -> Bool {
return lhs.name == rhs.name
}
let aRed = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 0.0)
aRed.name = "Red"
aRed.name
let anotherRed = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 0.0)
anotherRed.name = "Red"
aRed == anotherRed