【发布时间】:2023-03-13 00:38:02
【问题描述】:
当使用此代码从具有基本身份验证的服务器获取 JSON 时:
let config = URLSessionConfiguration.default
let userPasswordData = "\(username!):\(password!)".data(using: .utf8)
let base64EncodedCredential = userPasswordData!.base64EncodedString(options: Data.Base64EncodingOptions.init(rawValue: 0))
let authString = "Basic \(base64EncodedCredential)"
config.httpAdditionalHeaders = ["Authorization" : authString]
let session = URLSession(configuration: config)
let url = URL(string: "https://theforest.academy/api/v1/auth")
let task = session.dataTask(with: url!) {
(data, response, error) in
if (response as? HTTPURLResponse) != nil {
do {
if let data = data {
// let json1 = try JSONSerialization.jsonObject(with: data) as? [String: Any]
let json = try JSONSerialization.jsonObject(with: data, options: [], error: []) as? [String: Any]
if(json["valid"]) {
print(json["token"])
} else {
print("Invalid login")
}
}
} catch {
print("Error deserializing JSON: \(error)")
}
我收到以下错误
无法使用类型为 '( 的参数列表调用 'jsonObject': 数据,选项:[Any],错误:[Any])'
【问题讨论】:
-
您应该将数据传递给初始化程序而不是字符串,为什么还要从数据中创建字符串?
-
@dan 我编辑了答案以将数据传递给初始化程序,它给出了同样的错误。
-
你有正确的语法,在评论
// let json1 = try JSONSerialization.jsonObject(with: data) as? [String: Any];) -
developer.apple.com/library/content/documentation/Swift/… 我认为自 Swift 2.2 以来错误管理发生了变化。现在是 try/catch,
error参数不再出现在“方法调用签名”中。