2016-11-06 4 views
0

Swift 3.0では、次のthrows関数を使用してURLRequestを生成しました。asURLRequest Alamofire tryエラー

しかし
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() 

私は次のエラーを取得する:コールを投げることができる」、それが 『してみてください』とエラーが処理されないとマークされていません。。

私はエラー処理にいくつかのチュートリアルを見て、スウィフト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) 




    } 

} 

}

+0

これを解決する方法はありますか? –

答えて

2

do-catchブロック内で、あなたの関数呼び出しをラップし、tryでそれをマークするようにしてください。このようなもの

do {  
    let request = try Instagram.Router.requestOauthCode.asURLRequest() 

    // Continue with normal flow here. 
} catch { 
    // Handle error here. 
} 
+0

その後、私はsmthgを持っています: self.webView.loadRequest(URLRequestとしてリクエスト) これは言う...メンバーリクエスト(_:メソッド:パラメータ:エンコーディング:ヘッダー) –