[英]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.