UIView是Swift 3中的KindOfClass

Ste*_*cks 16 uiview swift swift3

所以我有这个代码:

if view.isKindOfClass(classType){...}
Run Code Online (Sandbox Code Playgroud)

这在Swift 2中运行良好,但是现在我在Swift 3中,我得到了这个错误:

类型的值UIView没有成员isKindOfClass

我如何在Swift 3中测试它?

Mar*_*uiz 36

您可以在Swift 3中尝试这三个选项:

选项1:

if view is UITabBarItem {

}
Run Code Online (Sandbox Code Playgroud)

选项2:

if view.isKind(of:UITabBarItem.self) {

}
Run Code Online (Sandbox Code Playgroud)

选项3:

if view.isMember(of:UITabBarItem.self) {

}
Run Code Online (Sandbox Code Playgroud)

isKind:of和isMember:of之间的区别是:

  • isKind:如果接收者是确切类的实例,则返回YES;如果接收者是该类的任何子类的实例,则返回YES.
  • isMember:如果接收者是您正在检查的确切类的实例,则返回YES


djr*_*ero 7

你可以使用,isKind(of:)但最好使用更加swifty isas:

看一个愚蠢的例子:

import Foundation

class Base {}
class SuperX: Base {}
class X: SuperX {}
class Y {}

func f(p: Any) {
    print("p: \(p)")
    guard let x = p as? Base
        else { return print("    Unacceptable") }

    if x is X {
        print("    X")
    }
    if x is SuperX {
        print("    Super X")
    }
    else {
        print("    Not X")
    }
}

f(p: Base())
f(p: SuperX())
f(p: X())
f(p: "hey")
f(p: Y())
f(p: 7)
Run Code Online (Sandbox Code Playgroud)

在游乐场中运行代码,输出将是:

p: Base
    Not X
p: SuperX
    Super X
p: X
    X
    Super X
p: hey
    Unacceptable
p: Y
    Unacceptable
p: 7
    Unacceptable
Run Code Online (Sandbox Code Playgroud)