Ios 将类型与Swift进行比较
我希望执行如下操作,但是当我尝试查看b==Test.self时,我得到了错误“任何类都不能转换为MirrorDisposition”。如何检查一个类型是否等于另一个类型Ios 将类型与Swift进行比较,ios,swift,Ios,Swift,我希望执行如下操作,但是当我尝试查看b==Test.self时,我得到了错误“任何类都不能转换为MirrorDisposition”。如何检查一个类型是否等于另一个类型 class Test { } var a = Test.self var b : AnyClass = a if(b == Test.self) { println("yes") } else { println("no") } 使用“等同于”运算符===: if b === Test.self {
class Test {
}
var a = Test.self
var b : AnyClass = a
if(b == Test.self) {
println("yes")
}
else {
println("no")
}
使用“等同于”运算符===
:
if b === Test.self {
print("yes")
}
else {
print("no")
}
这是因为类的类型本身就是类对象,因此可以
与==
进行比较
它不适用于struct
s。也许有人有一个更好的答案对你有用
所有Swift类型。如果您只想比较类类型,则只需使用NSStringFromClass比较类名,如下所示:
class Test {}
var a = Test.self
var b : AnyClass = a
if(NSStringFromClass(b) == NSStringFromClass(Test.self)) {
println("yes")
} else {
println("no")
}
如果要查找或比较对象的类型,可以使用“If…is…{}”语法,代码如下:
class Test { }
class Testb { }
var a = Test.self
let b : AnyObject = Testb()
if(b is Test) {
println("yes")
} else {
println("no")
}
如果您想使用==运算符进行对象到对象的相等性检查,您可以使您的测试类符合Equatable协议。这可以扩展到Swift中的结构和类类型,如本文NSHipster中所述:
然后,您可以按如下方式编写代码,请注意:这是对象相等性检查,所以您不能将b定义为AnyClass,您需要改为定义为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")
}
编辑:Swift 3
if b.isKind(of: Test.self) {
print("yes")
} else {
print("no")
}
试试看:)直到一个新的操作员:D谢谢。为什么不能在
Any?
和Any?
之间进行比较?我有一个错误:二进制运算符===不能应用于任何两个?操作数
@Kuba:=
运算符仅为类的实例定义。谢谢-这帮助我解决了一些特别痛苦的EXC\u BAD\u访问错误,因为is运算符返回了误报。@Matt Bolt Oh。酷:)由于某种原因,==(“等同于”)操作符在检查UIAlertController时没有工作,而.isKindOfClass工作正常let result=type(of:a)==type(of:b)
if b.isKind(of: Test.self) {
print("yes")
} else {
print("no")
}