Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将类型与Swift进行比较_Ios_Swift - Fatal编程技术网

Ios 将类型与Swift进行比较

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 {

我希望执行如下操作,但是当我尝试查看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 {
    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")
}