2017-03-01 2 views
3

Ich versuche, meine Codes von Swift 2 Version zu Swift 3 Version zu migrieren. Ich konnte den folgenden Codeteil nicht migrieren, und ich habe keine Lösung dafür gefunden. Wie kann ich es tun?Alamofire Typ 'ParameterEncoding' hat kein Mitglied '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

Ich gehe davon aus Sie nicht nur zu Swift Aktualisierung 3, aber auch die neueste Version von Alamofire verwenden? – Rob

+0

ja Sie sind richtig – Jessica

Antwort

1

würde ich den Namen dieser berechneten Eigenschaft ändern, sagen wir, request, mit dem neuen Typnamen zu vermeiden clashing, URLRequest. Zufälligerweise sollte diese berechnete Eigenschaft eine Art URLRequest verwenden:

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

Danke für Ihre Hilfe Rob. Aber es gibt und Fehler auf var request = URLRequest (url: url) like Kann Wert von Nichtfunktionsart 'URLRequest' nicht aufrufen – Jessica

+0

Haben Sie den Namen dieser Variablen geändert? Es kann durch den Typ "URLRequest" verwechselt werden, wenn Sie eine Variable mit demselben Namen haben. – Rob

+0

Ja Ich habe versucht, aber nicht funktioniert Problem verursacht durch URLRequest (url: url) nicht Variablenname Ich denke – Jessica

5

Sieht aus wie viel in Swift 3. Versuchen hat sich geändert, Ihren Code zu ändern, indem Referenz als unten Code nehmen.

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 
     } 
    } 
Verwandte Themen