解析 Alamofire JSON
Parsing Alamofire JSON
我正在构建一个适用于 Plaid 的应用程序。 Plaid 提供了一个不错的小 LinkKit,我需要用它来获取我的 link_token
。我提供 link_token
以向银行进行身份验证。我已经使用 Alamofire 编写了一个请求,当有人想要添加另一个帐户时发送 .post
以获得新的 link_token
。我的问题是,当我将 JSON 解码为我构建的结构时,我似乎无法使用存储的 link_token
值。
检索代码link_token
let parameters = PlaidAPIKeys(client_id: K.plaidCreds.client_id,
secret: K.plaidCreds.secret,
client_name: K.plaidCreds.client_name,
language: K.plaidCreds.language,
country_codes: [K.plaidCreds.country_codes],
user: [K.plaidCreds.client_user_id: K.plaidCreds.unique_user_id],
products: [K.plaidCreds.products])
func getLinkToken() {
let linkTokenRequest = AF.request(K.plaidCreds.plaidLinkTokenURL,
method: .post,
parameters: parameters,
encoder: JSONParameterEncoder.default).responseDecodable(of: GeneratedLinkToken.self) { response in
print(response)
}
}
我构建的结构:
struct GeneratedLinkToken: Decodable {
let expiration: String
let linkToken: String
let requestID: String
enum CodingKeys: String, CodingKey {
case expiration = "expiration"
case linkToken = "link_token"
case requestID = "request_id"
}
}
我已经通过在按下我的添加帐户或虚拟按钮时调用函数 getLinkToken()
进行了测试,我确实取回了我需要的数据。为什么我不能在请求后直接访问 GeneratedLinkToken.linkToken
?
您无法像这样访问 linkToken
属性:GeneratedLinkToken.linkToken
,因为 linkToken
例如 属性(read here)
如果你想在请求后获取一个实例,你可以这样做:
func getLinkToken(completion: @escaping ((GeneratedLinkToken) -> Void)) {
let linkTokenRequest = AF.request(K.plaidCreds.plaidLinkTokenURL,
method: .post,
parameters: parameters,
encoder: JSONParameterEncoder.default).responseDecodable(of: GeneratedLinkToken.self) { response in
print(response)
// if response is an object of type GeneratedLinkToken
switch response.result {
case .success(let object):
completion(object)
case .failure(let error):
// hanlde error
}
}
}
稍后您可以调用为:
getLinkToken { linkObject in
print("My tokne: \(linkObject.linkToken)")
}
我添加了completion
() to your method, since the request executing async, you can take a look at this Q/A: 。我也建议你,将parameters
作为参数传递给这个函数,而不是全局声明它。
我正在构建一个适用于 Plaid 的应用程序。 Plaid 提供了一个不错的小 LinkKit,我需要用它来获取我的 link_token
。我提供 link_token
以向银行进行身份验证。我已经使用 Alamofire 编写了一个请求,当有人想要添加另一个帐户时发送 .post
以获得新的 link_token
。我的问题是,当我将 JSON 解码为我构建的结构时,我似乎无法使用存储的 link_token
值。
检索代码link_token
let parameters = PlaidAPIKeys(client_id: K.plaidCreds.client_id,
secret: K.plaidCreds.secret,
client_name: K.plaidCreds.client_name,
language: K.plaidCreds.language,
country_codes: [K.plaidCreds.country_codes],
user: [K.plaidCreds.client_user_id: K.plaidCreds.unique_user_id],
products: [K.plaidCreds.products])
func getLinkToken() {
let linkTokenRequest = AF.request(K.plaidCreds.plaidLinkTokenURL,
method: .post,
parameters: parameters,
encoder: JSONParameterEncoder.default).responseDecodable(of: GeneratedLinkToken.self) { response in
print(response)
}
}
我构建的结构:
struct GeneratedLinkToken: Decodable {
let expiration: String
let linkToken: String
let requestID: String
enum CodingKeys: String, CodingKey {
case expiration = "expiration"
case linkToken = "link_token"
case requestID = "request_id"
}
}
我已经通过在按下我的添加帐户或虚拟按钮时调用函数 getLinkToken()
进行了测试,我确实取回了我需要的数据。为什么我不能在请求后直接访问 GeneratedLinkToken.linkToken
?
您无法像这样访问 linkToken
属性:GeneratedLinkToken.linkToken
,因为 linkToken
例如 属性(read here)
如果你想在请求后获取一个实例,你可以这样做:
func getLinkToken(completion: @escaping ((GeneratedLinkToken) -> Void)) {
let linkTokenRequest = AF.request(K.plaidCreds.plaidLinkTokenURL,
method: .post,
parameters: parameters,
encoder: JSONParameterEncoder.default).responseDecodable(of: GeneratedLinkToken.self) { response in
print(response)
// if response is an object of type GeneratedLinkToken
switch response.result {
case .success(let object):
completion(object)
case .failure(let error):
// hanlde error
}
}
}
稍后您可以调用为:
getLinkToken { linkObject in
print("My tokne: \(linkObject.linkToken)")
}
我添加了completion
(parameters
作为参数传递给这个函数,而不是全局声明它。