2016-10-01 4 views
13

So habe ich diesen Code:UIView isKindOfClass in Swift 3

if view.isKindOfClass(classType){...} 

Die in Swift fein gearbeitet 2, aber jetzt, dass ich in Swift bin 3, bekomme ich diesen Fehler:

Werte vom Typ UIView hat kein Mitglied isKindOfClass

Wie teste ich das in Swift 3?

+3

In Swift Sie in der Regel die 'is' Operator finden Sie unter http verwenden würde: // Stackoverflow. com/questions/24019707/using-iskindofclass-with-swift. –

Antwort

4

können Sie isKind(of:) verwenden, aber es ist besser, die mehr swifty is und as zu verwenden:

ein stummes Beispiel Siehe:

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) 

Führen Sie den Code auf einem Spielplatz ein, wird der Ausgang sein:

29

Sie können mit diesen drei Optionen in Swift 3 versuchen :

Option 1:

if view is UITabBarItem { 

} 

Option 2:

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

} 

Option 3:

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

} 

Der Unterschied zwischen isKind: von und IsMember: ist von:

  • isKind: von returns YES, wenn der Empfänger eine Instanz der exakten Klasse ist, ODER wenn der Empfänger eine Instanz einer Unterklasse der Klasse ist.
  • IsMember: von nur JA zurückgibt, wenn der Empfänger eine Instanz der Klasse genau ist Sie überprüfen gegen