Ok, một cái gì đó kỳ lạ đang xảy ra khi viết riêng bạn bằng nhà điều hành cho lớp con NSObject trong Swift 2.0 như thế này:Lỗi với bằng toán tử và NSObject trong Swift 2.0?
func ==(lhs: MyObject, rhs: MyObject) -> Bool {
return lhs.identifier == rhs.identifier
}
Đối với một lớp trông như thế này:
class MyObject: NSObject {
let identifier: String
init(identifier: String) {
self.identifier = identifier
}
}
này được sử dụng để làm việc chỉ tốt trong Swift 1.2 trở xuống. Nó vẫn hoạt động:
let myObject1 = MyObject(identifier: "A")
let myObject2 = MyObject(identifier: "A")
let result = (myObject1 == myObject2)
// result is true
Cho đến nay rất tốt, nhưng nếu cả hai biến là tùy chọn thì sao?
let myObject1: MyObject? = MyObject(identifier: "A")
let myObject2: MyObject? = MyObject(identifier: "A")
let result = (myObject1 == myObject2)
// result is false, equals operator was never even called
Và một điều khác mà không còn hoạt động:
let myObject1 = MyObject(identifier: "A")
let myObject2 = MyObject(identifier: "A")
let result = (myObject1 == myObject2)
// result is true
let result = (myObject1 != myObject2)
// result is true, equals operator was never even called
Vì vậy, rõ ràng, = không còn gọi là toán tử == và phủ nhận nó. Dường như chỉ so sánh các trường hợp thay vì khi sử dụng! =
Tất cả điều này chỉ xảy ra khi lớp của bạn là lớp con của NSObject (trực tiếp hoặc gián tiếp). Khi không, mọi thứ hoạt động giống như bạn mong đợi.
Bất cứ ai có thể cho tôi biết nếu đây là một 'tính năng' mới trong Swift 2.0 hay chỉ là một lỗi khó chịu?
Ý của bạn là để viết '== ', thay vì' = ', trong' ==' chức năng của bạn? Có thể là nguyên nhân của hành vi kỳ lạ, tuy nhiên tôi chưa thử nghiệm điều này. – ABakerSmith
Thật không may đây không phải là nguyên nhân (xem câu trả lời của tôi dưới đây) nhưng bạn đã đúng, nó phải là '== ' – Qbyte
Xin lỗi, lỗi đánh máy. Nhưng đó thực sự không phải là vấn đề của tôi. –