Swift - 关于泛型的JSONEncoder

时间:2018-01-29 04:49:44

标签: json swift generics

如何将泛型结构发送到返回JSON的函数?

我试图创建一个func,它将一个struct作为参数并返回一个JSON数据。我正在制作它,因为我想避免重复,它将在几个地方使用,并使用不同的结构(即:用户,客户,联系......)

struct User : Codable {
    let email: String
    let password: String
}

func makeJSONData<T>(_ value: T) -> Data {
    var jsonData = Data()
    let jsonEncoder = JSONEncoder()

    do {
        jsonData = try jsonEncoder.encode(value)
    }
    catch {
    }
    return jsonData
}

通过使用makeJSONData,我收到一个错误:参数类型&#39; T&#39;不符合预期类型&#39; Encodable&#39;

let user = User(email: emailTextField.text!, password : passwordTextField.text!)
let user2 = makeJSONData(user)

1 个答案:

答案 0 :(得分:1)

因为您没有定义T的类型,只需更改

makeJSONData<T>

makeJSONData<T: Codable>