Есть ли способ получить класс из Any (когда Any является экземпляром объекта)? - PullRequest
0 голосов
/ 25 апреля 2018

Я хотел бы реализовать модуль журналирования в моем приложении с общей подписью как (сокращенно):

func log(msg: String, instance: Any) {}

МОЕ приложение состоит из нескольких структур, и я хотел бы иметь возможность активировать /деактивировать ведение журнала в рамках.Сказать структуру (связку) из класса довольно просто, как в:

let bundle = Bundle(for: SomeClass.self)

Так что я попытался сделать в своем журнале func ():

let instance: Any = SomeClass() // This is for the purpose of explanation
if let theClass = type(of: instance) {
 let bundle = Bundle(for: theClass) // Doesn't work, because theClass is a metaType
}

Есть ли способ во время выполнения узнать, является ли переменная: Any экземпляром объекта и иметь для него AnyClass?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Вы можете решить это, используя Зеркало:

let paperino: Paperino = Paperino()
let any = paperino as Any
let anyMirror = Mirror(reflecting: any)
let thisClass = anyMirror.subjectType
if let anyclass = thisClass as? AnyClass {
    print(Bundle(for: anyclass).bundleIdentifier!)
}
0 голосов
/ 25 апреля 2018

Я считаю, что должно быть достаточно:

let instance: Any = SomeClass()

if let thisClass = type(of: instance) as? AnyClass {
    //is a class

    let bundle = Bundle(for: thisClass)
    print(bundle)
}
else {
    //is not a class
}

Фактически, пока вы правильно указали объект instance на AnyClass, вы сможете использовать его в Bundle(for:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...