Я застрял в вопросе быстро. Предположим, у меня есть один объект, как проверить, является ли он из struct или класса в swift.Как проверить, что объект принадлежит классу или структуре в swift
ответ
is
Оператор.
if someInstance is SomeType {
// do something
}
И есть as?
Оператор.
if let someInstance = someInstance as? SomeType {
// now someInstance is SomeType
}
Вы можете сделать это ниже заданным способом и 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()
Простой пример для этого:
var name = "Big Hero"
if name.isKindOfClass(NSString){
println("this is this class")
}else{
println("this is not this class")
}
В Swift 3.0, вы можете позвонить Mirror(reflecting:x).displayStyle
где x
ваше значение интереса. Результат будет class
, struct
, enum
, dictionary
, set
... смотрите документацию https://developer.apple.com/reference/swift/mirror.displaystyle
Пример кода:
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
Конечно, было бы лучше всего решать с помощью переключателя регистра заявление на практике ,
Этот подход работает для меня в Swift 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"
Обратите внимание, что этот подход говорит вам, только если экземпляр является типом класса или нет. Тот факт, что это не, не обязательно означает, что это структура (может быть перечисление, закрытие, кортеж и т. Д.). Но для большинства целей и контекстов этого достаточно знать, имеете ли вы дело с ссылочным типом или тип значения, который обычно является необходимым.
Только если вы знаете, что это не закрытие, потому что они также являются ссылочными типами. – Binarian
В swift4, проверка класса или структуры
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
- 1. Как проверить, к какому классу принадлежит объект?
- 2. Обратите внимание, что объект принадлежит классу ObjC в Swift
- 3. Проверить, принадлежит ли объект классу Java
- 4. Убедитесь, что объект принадлежит к общему классу
- 5. Как узнать, принадлежит ли объект классу x?
- 6. Как проверить, принадлежит ли MethodDeclaration внутреннему классу
- 7. Найти, если объект принадлежит классу в C++
- 8. Установив, что тип записи принадлежит данному классу
- 9. Как узнать, принадлежит ли какой-либо конкретный объект классу?
- 10. Jena: Как проверить, принадлежит ли экземпляр определенному классу?
- 11. Проверить объект принадлежит current_user в контроллере (has_and_belongs_to_many)
- 12. Как проверить, какой пакет .bpl принадлежит объекту
- 13. Как проверить, что экземпляр принадлежит пользователю входа?
- 14. , чтобы проверить, если файл принадлежит к классу в питоне
- 15. метод finalize() в JAVA принадлежит к классу?
- 16. Открытый доступ только к классу, которому принадлежит объект
- 17. Hibernate hasMany/принадлежит к структуре
- 18. Тестирование того, что объект принадлежит или создан current_user
- 19. Swift считает, что переменная в структуре необязательна
- 20. Как узнать, принадлежит ли закрытие классу?
- 21. Как проверить, если объект принадлежит к массиву в Ruby,
- 22. Как сказать, к какому классу принадлежит указатель
- 23. Как проверить, что значение принадлежит интервалу в matlab
- 24. Где принадлежит объект Datasource? Контроллер или модель?
- 25. Как позвонить классу в swift
- 26. Swift: Как проверить объект - это класс Array или String?
- 27. Выставляют объект, которому принадлежит свойство
- 28. Python декоратора делает функция забывать, что она принадлежит к классу
- 29. Какое пространство имен принадлежит фабричному классу?
- 30. Как проверить Swift, если объект недействителен?
Похоже, что это невозможно сделать в Swift 3. Однако объект класса есть ** суперкласс ** свойство и Struct объекты не имеют. –