2015-08-06 3 views

Antwort

2

Es gibt is Operator.

if someInstance is SomeType { 
    // do something 
} 

Und es gibt as? Operator.

-1

Sie können dies durch unten angegebenen Weg und for more information on this please follow this link.

class Shape { 
    class func className() -> String { 
     return "Shape" 
    } 
} 

class Square: Shape { 
    override class func className() -> String { 
     return "Square" 
    } 
} 

class Circle: Shape { 
    override class func className() -> String { 
     return "Circle" 
    } 
} 

func getShape() -> Shape { 
    return Square() // hardcoded for example 
} 

let newShape: Shape = getShape() 
newShape is Square // true 
newShape is Circle // false 
newShape.dynamicType.className() // "Square" 
newShape.dynamicType.className() == Square.className() 
-1

Ein einfaches Beispiel hierfür:

var name = "Big Hero" 
     if name.isKindOfClass(NSString){ 

      println("this is this class") 

     }else{ 

      println("this is not this class") 
     } 
4

In Swift 3.0 können Sie Mirror(reflecting:x).displayStyle nennen, wo x Ihr Wert von Interesse ist. Das Ergebnis wird class, struct, enum, dictionary, set ... sehen sein, die Dokumentation https://developer.apple.com/reference/swift/mirror.displaystyle

Codebeispiel:

struct SomeStruct { 
    var name: String 
    init(name: String) { 
      self.name = name 
    } 
} 
var astruct = SomeStruct(name:"myname") 
Mirror(reflecting:astruct).displayStyle == .struct // will be true 
Mirror(reflecting:astruct).displayStyle == .class; // will be false 

class MyClass { 
     var name:String 
     init(name: String) { 
      self.name=name 
     } 
} 
var aclass = MyClass(name:"fsdfd") 
Mirror(reflecting:aclass).displayStyle == .struct // will be false 
Mirror(reflecting:aclass).displayStyle == .class // will be true 

Natürlich wäre es in der Praxis eine switch-case-Anweisung am besten behandelt wird unter Verwendung von .

4

Dieser Ansatz wurde für mich in Swift Arbeits 3:

class TestClass { } 
struct TestStruct { } 

var mystery:Any 

mystery = TestClass() 
// Is mystery instance a class type? 
print(type(of:mystery) is AnyClass ? "YES" : "NO") // prints: "YES" 

mystery = TestStruct() 
// Is mystery instance a class type? 
print(type(of:mystery) is AnyClass ? "YES" : "NO") // prints: "NO" 

Beachten Sie, dass dieser Ansatz Ihnen sagt, nur wenn eine Instanz einer Klasse-Typ ist oder nicht. Die Tatsache, dass es nicht eine Klasse ist, bedeutet nicht unbedingt, dass es eine Struktur ist (könnte eine Enum, Schließung, Tupel, etc.) Aber für die meisten Zwecke und Kontexte ist dies genug zu wissen, ob Sie mit einem Referenztyp oder beschäftigen ein Werttyp, der normalerweise benötigt wird.

+0

Nur wenn Sie wissen, dass es keine Schließung ist, weil sie auch Referenztypen sind. – Binarian

1

In swift4, Prüfen Klasse oder Struktur

class TClass {} 
struct TStruct {} 

func who(_ any: Any) -> String { 
    if Mirror(reflecting: any).displayStyle == .class { 
     return "Class" 
    } else { 
     return "Struct" 
    } 
} 

print(who("Hello")) // Struct 
print(who(TClass())) // Class 
print(who(TStruct())) // Struct 
print(who(1)) // Struct 
Verwandte Themen