【发布时间】:2018-12-06 00:17:02
【问题描述】:
我正在尝试使用 alamofire 从 api 获取数据,它给了我 无效URL("http://tdlly.com/Api/Advertisements/1/18") 我尝试对 url 进行编码,但也无法正常工作,这是我的代码
class func nearAds(completion: @escaping(_ error: Error?, _ data:[Ad]?)->Void) {
let url = URLs.nearAds+"\(helper.getApiToken())"
//let s = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
Alamofire.request(url, method: .get, parameters: nil, encoding: URLEncoding.default , headers: nil).responseJSON { (response) in
switch response.result
{
case.failure(let error):
completion(error,nil)
print("error for nearAds",error)
case.success(let value):
let json = JSON(value)
print("near,\(json)")
guard let dataArr = json.array else{
completion(nil , nil)
return
}
var ads = [Ad]()
for data in dataArr {
if let data = data.dictionary ,let result = Ad.init(dic: data) {
ads.append(result)
}
}
completion(nil,ads)
}
}
}
【问题讨论】:
-
helper.getApiToken() 的返回值是可选的吗?如果是这样,您的 url 字符串将由 "Optional("")" 组成。
-
@koropok 我将登录 json 中的令牌保存在 userDefaults 并通过这个 func 类 func getApiToken() -> Int { let def = UserDefaults.standard return (def.object(forKey: "user_id ") as! int) }
-
我在 alamofire 上运行了您的 URL,它似乎可以正常工作。你能在你的网址上打印一下吗?
-
@koropok tdlly.com/Api/Advertisements/1/18 这是带有令牌 ID 的 url,当我在邮递员处尝试它时它的工作但在 xcode 不工作时给我 invaildURL
-
为了调试你的错误,我会使用 Postman。抛出一个断点并在调试器中键入
po url。然后,在 Postman 中,从调试器中转储该 url,看看 API 会返回什么。