Как я могу зарегистрировать значение универсального типа с помощью OSLog? - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть следующий метод, который упаковывает UserDefaults, чтобы я мог взаимодействовать с API безопасным для типов способом.

public func item<T>(forKey key: Key<T>) -> T? {
    var item: T?
    defer {
        #if DEBUG
        os_log(item != nil ? "Returned value for key '%@'" : "Returned 'nil' for key '%@'", log: Defaults.defaultsLog, type: .debug, key.value)
        #endif
    }
    if let value = defaults.value(forKey: key.value) as? T, value is FoundationCodable || value is SwiftCodable {
        item = value
        return value
    }
    guard let data = defaults.data(forKey: key.value) else { return nil }
    guard let decoded = try? decoder.decode(T.self, from: data) else { return nil }
    item = decoded
    return decoded
}

Я хочу записать возвращенное значение, используя:

func os_log(_ message: StaticString, dso: UnsafeRawPointer? = #dsohandle, log: OSLog = default, type: OSLogType = default, _ args: CVarArg...)

Однако мой общий тип, T, не соответствует CVarArg.

Можно ли записать возвращенное значение?Если так, то как мне структурировать свою логику, чтобы добиться этого?

1 Ответ

0 голосов
/ 27 сентября 2018

Журнал String(description:decoded) as NSString.

...