Различать тип значения Swift от объекта, то есть ссылочного типа во время выполнения? - PullRequest
0 голосов
/ 04 ноября 2018

Есть ли какой-либо способ отличить типы значений (например, кортежи, перечисления и структуры, включая примитивы) от объекта, также известного как ссылочные типы в Swift во время выполнения, используя Swift или время выполнения Objective-C?

1 Ответ

0 голосов
/ 04 ноября 2018

Вот способ проверить, является ли переменная экземпляром класса:

object_isClass(type(of: yourVariable))

Используется тип (из:) , который возвращает динамический тип переменной.

Вот несколько тестов:

let a = 1

let b = ("a", 2.3)

enum MyEnum { case one; case two }
let c = MyEnum.one

struct MyStruct { let property: Int }
let d = MyStruct(property: 0)

class MyClass {}
let e = MyClass()

object_isClass(type(of: a))  //false
object_isClass(type(of: b))  //false
object_isClass(type(of: c))  //false
object_isClass(type(of: d))  //false
object_isClass(type(of: e))  //true
...