asURLRequest Alamofire重试错误
在Swift 3.0中,我使用以下抛出函数生成URLRequestasURLRequest Alamofire重试错误,url,swift3,alamofire,Url,Swift3,Alamofire,在Swift 3.0中,我使用以下抛出函数生成URLRequest func asURLRequest() throws -> URLRequest { let result: (path: String, parameters: [String: AnyObject]?) = try { switch self { case .PopularPhotos (let userID, let accessToken):
func asURLRequest() throws -> URLRequest {
let result: (path: String, parameters: [String: AnyObject]?) = try {
switch self {
case .PopularPhotos (let userID, let accessToken):
let params = try ["access_token": accessToken]
let pathString = try "/v1/users/" + userID + "/media/recent"
return try (pathString, params as [String : AnyObject]?)
case .requestOauthCode:
let pathString = try "/oauth/authorize/?client_id=" + Router.clientID + "&redirect_uri=" + Router.redirectURI + "&response_type=code"
return try (pathString, nil)
default: break
}
}()
但是,当我调用函数时:
let request = Instagram.Router.requestOauthCode.asURLRequest()
我得到以下错误:“调用可以抛出,但它没有标记为‘try’,并且错误没有被处理
我已经看过几篇关于Swift 3.0中错误处理和抛出函数的教程,但我不知道如何在这里处理错误
完整的课程代码如下:
struct Instagram {
enum Router: URLRequestConvertible {
static let baseURLString = "https://api.instagram.com"
static let clientID = "cf97d864faf14f90a1557c4b972c990e"
static let redirectURI = "http://www.example.com/"
static let clientSecret = "7f1ce6147f924afc92dea31f5354ca06"
case PopularPhotos(String, String)
case requestOauthCode
static func requestAccessTokenURLStringAndParms(code: String) -> (URLString: String, params: [String: AnyObject]) {
let params = ["client_id": Router.clientID, "client_secret": Router.clientSecret, "grant_type": "authorization_code", "redirect_uri": Router.redirectURI, "code": code]
let pathString = "/oauth/access_token"
let urlString = Instagram.Router.baseURLString + pathString
return try (urlString, params as [String : AnyObject])
}
// MARK: URLRequestConvertible
func asURLRequest() throws -> URLRequest {
let result: (path: String, parameters: [String: AnyObject]?) = try {
switch self {
case .PopularPhotos (let userID, let accessToken):
let params = try ["access_token": accessToken]
let pathString = try "/v1/users/" + userID + "/media/recent"
return try (pathString, params as [String : AnyObject]?)
case .requestOauthCode:
let pathString = try "/oauth/authorize/?client_id=" + Router.clientID + "&redirect_uri=" + Router.redirectURI + "&response_type=code"
return try (pathString, nil)
default: break
}
}()
let baseURL = try Router.baseURLString.asURL()
let urlRequest = try URLRequest(url: baseURL.appendingPathComponent(result.path))
return try Alamofire.URLEncoding.default.encode(urlRequest, with: result.parameters)
}
}
}尝试将函数调用包装在一个
do catch
块中,并用Try
标记它
do {
let request = try Instagram.Router.requestOauthCode.asURLRequest()
// Continue with normal flow here.
} catch {
// Handle error here.
}
有人知道如何解决这个问题吗?在这之后的一行中,我有了类似于:self.webView.loadRequest(请求为URLRequest)的smthg,它现在说…对成员请求的不含糊引用(u:method:parameters:encoding:headers)