繁体   English   中英

Swift 3:如何将struct转换为Parameters

[英]Swift 3 : How to convert struct to Parameters

我有一个struct如下

struct UserInfo
{
    var userId : Int
    var firstName : String
    var lastName : String
}

如何序列化UserInfo实例以键入Parameters

var user = UserInfo(userId: 1, firstName: "John", lastName: "Skew")

// Convert user to Parameters for Alamofire
Alamofire.request("https://httpbin.org/post", parameters: parameters)

只需实现一个dictionaryRepresentation计算变量或函数:

struct UserInfo {
    var userId : Int

    var firstName : String
    var lastName : String

    var dictionaryRepresentation: [String: Any] {
        return [
            "userId" : userId,
            "firstName" : firstName,
            "lastName" : lastName
        ]
    }
}

用法:

var user = UserInfo(userId: 1, firstName: "John", lastName: "Skew")
let userDict = user.dictionaryRepresentation

您可以使用CodableFirebase库。 虽然它的主要用途是将它与Firebase实时数据库Firestore一起使用 ,但它实际上可以满足您的需求 - 将值转换为字典[String: Any]

您的模型将如下所示:

struct UserInfo: Codable {
    var userId : Int
    var firstName : String
    var lastName : String
}

然后您将通过以下方式将其转换为字典:

import CodableFirebase

let model: UserInfo // here you will create an instance of UserInfo
let dict: [String: Any] = try! FirestoreEncoder().encode(model)

您不能直接将struct作为参数传递。 您需要将结构转换为[String:Any] 我添加了一个新的变量描述,将您的内容转换为字典

struct UserInfo
{
    var userId : Int
    var firstname : String
    var lastname : String


    var description:[String:Any] {
        get {
            return ["userId":userId, "firstname": self.firstname, "lastname": lastname] as [String : Any]
        }
    }
}

用法是

var user = UserInfo(userId: 1, firstname: "John", lastname: "Skew")

// Convert user to Parameters for Alamofire
Alamofire.request("https://httpbin.org/post", parameters: user.description)

如果您要将参数作为POST请求发送,那么它应采用字典格式,如下所示:

let userDict = ["userId" : user.userId, "firstname" : user.firstname, "lastname" : user.lastname]

这应该作为您的网络的“参数”

在Swift 4中,您可以使用Decodable / Codable Struct

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM