2017-03-01 106 views
3

我试图将我的代码从swift 2版本迁移到swift 3版本。 我无法迁移下面的代码部分,我没有找到任何解决方案。 我该怎么办?Alamofire类型'ParameterEncoding'没有成员'URL'Swift 3

// MARK:URLRequestConvertible

 public var URLRequest: NSMutableURLRequest { 
      let urlComponent = NSURLComponents(string: Router.baseURL)! 
      urlComponent.path = Router.basePath.stringByAppendingString(path) 

      let mutableURLRequest = NSMutableURLRequest(URL: urlComponent.URL!) 
      mutableURLRequest.HTTPMethod = method.rawValue 

      var parameters: [String: AnyObject] = Dictionary() 
      parameters["key"] = Router.key 
      parameters["hl"] = "en" 

      switch self { 
      case .getMostPopularVideos(let pageToken): 
       parameters["part"] = "snippet,contentDetails,statistics" 
       parameters["chart"] = "mostPopular" 
       parameters["videoCategoryId"] = TubeTrends.Settings.topTrendsCat 
       if let pageToken = pageToken { 
         parameters["pageToken"] = pageToken 
       } 
       return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0 //This part Giving Error like Alamofire Type 'ParameterEncoding' has no member 'URL' 

//   default: 
//    return mutableURLRequest 
      } 
     } 
    } 
+0

我假设你不仅更新到斯威夫特3,而且还采用了最新版的Alamofire的? – Rob

+0

是的你是正确的 – Jessica

回答

1

我会改变这个计算的性质,比方说,request的名称,以避免与新的类型名称,URLRequest冲突。巧合的是,这个计算的性质应该使用类型的URLRequest

public var request: URLRequest { 
    let url = URL(string: Router.baseURL)! 
     .appendingPathComponent(Router.basePath) 
     .appendingPathComponent(path) 

    var request = URLRequest(url: url) 
    request.httpMethod = method.rawValue 

    var parameters = [String: Any]() 
    parameters["key"] = Router.key 
    parameters["hl"] = "en" 

    switch self { 
    case .getMostPopularVideos(let pageToken): 
     parameters["part"] = "snippet,contentDetails,statistics" 
     parameters["chart"] = "mostPopular" 
     parameters["videoCategoryId"] = TubeTrends.Settings.topTrendsCat 
     if let pageToken = pageToken { 
      parameters["pageToken"] = pageToken 
     } 
     return try! Alamofire.URLEncoding.default.encode(request, with: parameters) 
    } 
} 
+0

感谢您的帮助罗布。但它给和var request = URLRequest(url:url)like错误无法调用非函数类型的值'URLRequest' – Jessica

+0

您是否更改此变量的名称?当你有一个相同名字的变量时,它可能被'URLRequest'类型混淆。 – Rob

+0

是的我试过但没有工作的问题引起的URLRequest(url:url)不是变量名我认为 – Jessica

5

貌似很多雨燕3.尝试改变,采取参考如下代码来改变你的代码。

func asURLRequest() throws -> URLRequest { 
     let url = URL(string: Router.baseURLString)! 
     var urlRequest = URLRequest(url: url.appendingPathComponent(path)) 
     urlRequest.httpMethod = method.rawValue 

     if let token = Router.OAuthToken { 
      urlRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") 
     } 

     switch self { 
     case .createUser(let parameters): 
      return try Alamofire.JSONEncoding.default.encode(urlRequest, with: parameters) 
     case .updateUser(_, let parameters): 
      return try Alamofire.URLEncoding.default.encode(urlRequest, with: parameters) 
     default: 
      return urlRequest 
     } 
    } 
相关问题