// // Options.swift // flutter_inappwebview // // Created by Lorenzo on 26/09/18. // import Foundation @objcMembers public class ISettings<T>: NSObject { override init(){ super.init() } func parse(settings: [String: Any?]) -> ISettings<T> { for (key, value) in settings { if !(value is NSNull), value != nil { if self.responds(to: Selector(key)) { self.setValue(value, forKey: key) } else if self.responds(to: Selector("_" + key)) { self.setValue(value, forKey: "_" + key) } } } return self } func toMap() -> [String: Any?] { var settings: [String: Any?] = [:] var counts = UInt32() let properties = class_copyPropertyList(object_getClass(self), &counts) for i in 0..<counts { if let property = properties?.advanced(by: Int(i)).pointee { let cName = property_getName(property) let name = String(cString: cName) let key = !name.hasPrefix("_") ? name : String(name.suffix(from: name.index(name.startIndex, offsetBy: 1))) settings[key] = self.value(forKey: key) } } free(properties) return settings } func getRealSettings(obj: T?) -> [String: Any?] { let realSettings: [String: Any?] = toMap() return realSettings } }