使用Alamofire时,元组类型的值没有成员验证是啥意思?
Posted
技术标签:
【中文标题】使用Alamofire时,元组类型的值没有成员验证是啥意思?【英文标题】:When using Alamofire, what does value of tuple type has no member validate mean?使用Alamofire时,元组类型的值没有成员验证是什么意思? 【发布时间】:2018-07-01 13:56:36 【问题描述】:我正在寻找一种使用 JWT 不记名令牌向 Microsoft Azure 进行身份验证的解决方案,该不记名令牌不使用简单的用户名和密码,而是使用客户端 ID、客户端密码和其他两个参数。身份验证过程在 Postman 中运行时有效,但是当我使用 Alamofire 在 Xcode 中重新创建解决方案时,它显示 400 错误。我想将 Alamofire 请求打印到控制台,以便我们可以看到 Alamofire 是如何构建 URL 的。
当我尝试将 Alamofire 的请求类方法放入打印函数时,它不会编译并且我收到 Xcode 错误:
Value of tuple type '()' has no member 'validate'
这是我尝试打印到控制台的代码行:
print(Alamofire.request(authorizationURL, method: .post, parameters: parameters, encoding: URLEncoding(destination: .queryString), headers: headers))
【问题讨论】:
到目前为止,您提供的代码应该可以正常工作,您能提供导致错误的代码吗? @AhmadF 感谢您的评论,因为它让我坚持下去,我意识到我将打印语句放在了 Alamofire 请求块中,位于我的 .validate 语句之前。通过将打印语句移动到请求语句之外它可以工作。 【参考方案1】:我意识到我将打印语句放在了 Alamofire 请求块中,位于我的 .validate 语句之前。通过将打印语句移到请求语句之外它可以工作。
import UIKit
import Alamofire
import SwiftyJSON
class ***: UIViewController
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
***.getAzureTokenOld()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
@objc class func getAzureTokenOld()
let authorizationPath: String = "https://login.microsoftonline.com/tenantID/oauth2/token"
if let authorizationURL: URL = URL.init(string: authorizationPath)
//do stuff with your authorization url
let parameters: [String: Any] = [
"grant_type" : "client_credentials",
"client_id" : "testID",
"client_secret" : "testSecret",
"resource" : "https://rest.media.azure.net"
]
let headers = [
"Content-Type": "application/x-www-form-urlencoded",
"Keep-Alive": "true"
]
Alamofire.request(authorizationURL, method: .post, parameters: parameters, encoding: URLEncoding(destination: .queryString), headers: headers)
.validate(statusCode: 200..<300)
.responseJSON response in
switch response.result
case .success:
print("Validation Successful")
let value = response.result.value
print("The valued response is: \(String(describing: value))")
case .failure(let error):
print(error.localizedDescription)
debugPrint("checking checking: \(response)")
print(Alamofire.request(authorizationURL, method: .post, parameters: parameters, encoding: URLEncoding(destination: .queryString), headers: headers))
【讨论】:
此外,如果您使用 Alamofire 使用 Microsoft Azure 媒体服务,您可能需要将编码参数更改为 URLEncoding.default 以获得成功的响应。以上是关于使用Alamofire时,元组类型的值没有成员验证是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire 4.0 上的“类型‘任何’没有下标成员”错误
使用 Swift 3 的 Alamofire 4.0 出现“没有成员”错误
Alamofire 5 类型 'Request' 没有成员 'authorizationHeader'