Распаковывать общий тип - PullRequest
       8

Распаковывать общий тип

0 голосов
/ 02 февраля 2019

Я пытался выяснить, но не смог найти ни одного решения.Итак, спрашиваю вас, ребята.

Есть ли шанс написать функцию, возвращаемую как универсальный тип?

У меня есть структура, как показано ниже

struct WWSInterest: Unboxable {
    var confirmation: Bool
    var data: [WWSKeyValue]?
    var message: String?

    init(unboxer: Unboxer) throws {
        self.confirmation = try! unboxer.unbox(key: "confirmation")
        self.data = try? unboxer.unbox(key: "data")
        self.message = try? unboxer.unbox(key: "message")
    }

//    static func createFrom(data: Data) -> WWSInterest? {
//        do {
//            let r: WWSInterest = try unbox(data: data)
//            return r
//        } catch {
//            return nil
//        }
//    }
}

и яхочу помочь, как показано ниже

func create<T>(from data: Data) -> T? {
    do {
        let r: T = try unbox(data: data)
        return r
    } catch {
        return nil
    }
}

Возможно ли это?

Кстати: простите, мой плохой английский

// Edit

WWSKeyValue имеет следующую структуру,

struct WWSKeyValue: Unboxable {
    var key: String
    var value: String

    init(unboxer: Unboxer) throws {
        self.key = try! unboxer.unbox(key: "key")
        self.value = try! unboxer.unbox(key: "value")
    }
}
...