Ответ 1
В первую очередь мне необходимо процитировать из документации Swift Programming Language:
У классов есть дополнительные возможности, которые структуры не:
- Тип casting позволяет вам проверять и интерпретировать тип экземпляра класса во время выполнения.
В соответствии с этим, это может быть полезно для кого-то в будущем:
func areTheySiblings(class1: AnyObject!, class2: AnyObject!) -> Bool {
return object_getClassName(class1) == object_getClassName(class2)
}
и тесты:
let myArray1: Array<AnyObject> = Array()
let myArray2: Array<Int> = Array()
let myDictionary: Dictionary<String, Int> = Dictionary()
let myString: String = String()
let arrayAndArray: Bool = self.areTheySiblings(myArray1, class2: myArray2) // true
let arrayAndString: Bool = self.areTheySiblings(myArray1, class2: myString) // false
let arrayAndDictionary: Bool = self.areTheySiblings(myArray1, class2: myDictionary) // false
UPDATE
вы также можете перегрузить новый оператор для выполнения таких действий, например, например. это:
infix operator >!< {}
func >!< (object1: AnyObject!, object2: AnyObject!) -> Bool {
return (object_getClassName(object1) == object_getClassName(object2))
}
и результаты:
println("Array vs Array: \(myArray1 >!< myArray2)") // true
println("Array vs. String: \(myArray1 >!< myString)") // false
println("Array vs. Dictionary: \(myArray1 >!< myDictionary)") // false
UPDATE # 2
вы также можете использовать его для своих новых классов Swift, например, например. те:
class A { }
class B { }
let a1 = A(), a2 = A(), b = B()
println("a1 vs. a2: \(a1 >!< a2)") // true
println("a1 vs. b: \(a1 >!< b)") // false