Я реализовал расширение для NSObject, чтобы получить динамический тип моих объектов:
extension NSObject {
var dynamic_type : String {
get {
return String(describing: type(of: self))
}
}
}
Это отлично работает для публичных классов.
В классе с именем InitialState dynamic_type будет "InitialState" (это то, что я хочу). Но как только я изменю класс на private или fileprivate, это будет что-то вроде "(InitialState в _AF5C6D4A3B423A6F0735A7740F802E5A)" (круглые скобки также возвращаются)
Почему так и что означает часть после "in"? Как я могу получить простое имя класса для каждого типа класса? (публичный, частный, файловый)
Я знаю, что могу просто проанализировать строку, чтобы получить простое имя класса, но я хочу понять, что именно происходит, и, возможно, я делаю это неправильно.
className
дляNSObject
уже есть. - person Alexander   schedule 17.01.2018String(describing: type(of: self))
, является деталью реализации, на нее не следует полагаться. Для чего именно вам это нужно? - person Hamish   schedule 17.01.2018NSStringFromClass(type(of: self))
; это даст вам имя, под которым среда выполнения Obj-C видит класс (которое можно изменить с помощью@objc(...)
). - person Hamish   schedule 18.01.2018NSObject
, не совсем так. Класс фактически доступен среде выполнения Obj-C независимо от атрибута@objc
. - person Hamish   schedule 22.01.2018