У меня проблема с Xcode 11.4, использующим Swift 5.2 при попытке получить значение fun c при выполнении селектора. Это произошло с функцией, которая возвращает тип Number или Bool. Вот мой код:
if returnReadableType == "NSInteger" {
let c: NSObject.Type = cls as! NSObject.Type
if let performValue = c.perform(originalSelector)?.toOpaque() {
let originalResponse: Int = Int(bitPattern: performValue)
configDataResult[name] = originalResponse
}
} else if returnReadableType == "BOOL" {
let c: NSObject.Type = cls as! NSObject.Type
if let performValue = c.perform(originalSelector)?.toOpaque() {
let originalResponse: Bool = Bool(truncating: Int(bitPattern: performValue) as NSNumber)
configDataResult[name] = originalResponse
}
}
Чтобы объяснить код, я пытаюсь выполнить селектор, чтобы получить его значение для быстрого просмотра их во время выполнения. Поскольку я не знаю, сколько вычисляемых свойств в классе будет объявлено, поэтому я использовал метод class_copyMethodList , чтобы получить весь метод в cls. Затем с помощью некоторого трюка для определения типа возвращаемого значения - returnReadableType, (в строке) каждого метода. С returnReadableType равны BOOL или NSInteger , я получил cra * sh при выполнении селектора. Журнал cra sh:
Message from debugger: The LLDB RPC server has crashed. The crash log is located in ~/Library/Logs/DiagnosticReports and has a prefix 'lldb-rpc-server'. Please file a bug and attach the most recent crash log.
Этого не произошло в