Nếu bạn chỉ muốn so sánh các loại lớp học, sau đó bạn có thể chỉ cần sử dụng NSStringFromClass để so sánh tên lớp như sau:
class Test {}
var a = Test.self
var b : AnyClass = a
if(NSStringFromClass(b) == NSStringFromClass(Test.self)) {
println("yes")
} else {
println("no")
}
Nếu bạn muốn tìm hiểu hoặc so sánh kiểu của một đối tượng, bạn có thể sử dụng "nếu ... là ... {}" cú pháp như mã bên dưới:
class Test { }
class Testb { }
var a = Test.self
let b : AnyObject = Testb()
if(b is Test) {
println("yes")
} else {
println("no")
}
Nếu bạn muốn làm đối tượng để đối tượng kiểm tra bình đẳng với toán tử ==, bạn có thể làm cho class Test của bạn phù hợp với Equatable giao thức. Điều này có thể được mở rộng cho cả hai loại Struct và Class trong Swift như được giải thích trong bài viết NSHipster này: http://nshipster.com/swift-comparison-protocols/.
Bạn mã sau đó có thể được viết như dưới đây, xin lưu ý: đây là đối tượng kiểm tra bình đẳng, vì vậy bạn không thể xác định b là AnyClass, bạn cần thay vì xác định là AnyObject.
class Test: Equatable { }
// MARK: Equatable
func ==(lhs: Test, rhs: Test) -> Bool {
return ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
}
var a = Test()
var b : AnyObject = a
if((b as Test) == a) {
println("yes")
} else {
println("no")
}
TIL về một mới khai thác: D Cảm ơn. – puttputt
Tại sao nó không thể được so sánh giữa 'Bất kỳ?' Và 'Bất kỳ? '? Tôi đã có lỗi: 'Toán tử nhị phân === không thể áp dụng cho hai Không? operands' – Kuba
@Kuba: Toán tử '===' chỉ được định nghĩa cho các trường hợp của một lớp *. * –