【发布时间】:2020-01-13 17:21:54
【问题描述】:
我正在尝试在我的操场上运行它:
func getWeatherForecast(){
let Endpoint : String = "http://dataservice.accuweather.com/currentconditions/v1/{}"
let url = URL(string:Endpoint)
let parameters = ["apikey":"API_KEY"] as [String:Any?]
var urlRequest = URLRequest(url:url!)
do
{urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
} catch {
print("error")
}
let task = URLSession.shared.dataTask(with: urlRequest) {(data, response, error) in
do {
let json = try JSONSerialization.jsonObject(with: data!, options: [])
print("The Response is : ",json)
} catch {
print("JSON error: \(error.localizedDescription)")
}
}
task.resume()
}
getWeatherForecast()
然后我不断收到以下两个错误:
error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION
(code=EXC_I386_INVOP, subcode=0x0).
The process has been left at the point where it was interrupted, use
"thread return -x" to return to the state before expression
我已经尝试了许多运行此 API 调用的变体,但我无法弄清楚我的代码有什么问题。任何人都可以在这里帮忙吗?我只是想制作一个简单的 GET,但它似乎一直告诉我“致命错误:在展开可选值时意外发现 nil”我觉得我已经正确展开。
任何帮助将不胜感激。谢谢!
【问题讨论】:
-
在
with: data!:数据可以为nil,应用会崩溃。事先检查 nil 值。此外,最好先检查您是否收到错误。如果你这样做了,根本没有必要检查数据 -
@KirilS。所以我删除了强制解包并检查了 Nil,但我仍然遇到同样的错误。另外,您的意思是在尝试运行 JSON 序列化之前先检查错误。
-
等一下……这不是一个请求它的 URL:
http://dataservice.accuweather.com/currentconditions/v1/{}不是一个有效的 URL(方括号是不允许的,如果需要,应该转义)例如http://dataservice.accuweather.com/currentconditions/v1/%7B%7D -
这似乎可以解决该部分的问题。但我仍然得到同样的 Nil 错误。这发生在我的 task.resume() 之后的某个地方。任何想法?我是否错误地处理了数据?编辑:当我删除 !来自
data,它要求我添加! -
你总是可以做到
guard let data = data else { // data is nil, do something else }
标签: swift xcode get httprequest urlsession