Korrekte Verwendung des URLRequestConvertible von Alamofire

Gelesen habe ich paar tutorials, README-Datei von @mattt aber kann nicht herausfinden, paar Dinge.

  1. Was ist die richtige Verwendung von URLRequestConvertible in der realen Welt-API? Es sieht aus wie wenn ich einen erstellen-router durch die Implementierung URLRequestConvertible - Protokoll für alle API - es wird kaum noch lesbar. Sollte ich einen Router pro Endpunkt?
  2. Zweite Frage, wahrscheinlich aufgrund mangelnder Erfahrung mit Swift Sprache. Ich kann nicht herausfinden, warum enum ist für den Bau verwendet router? Warum benutzen wir keine Klasse mit statischen Methoden?
    hier ist ein Beispiel (von Alamofire README)

    enum Router: URLRequestConvertible {
        static let baseURLString = "http://example.com"
        static let perPage = 50
    
        case Search(query: String, page: Int)
    
        //MARK: URLRequestConvertible
    
        var URLRequest: NSURLRequest {
            let (path: String, parameters: [String: AnyObject]?) = {
                switch self {
                case .Search(let query, let page) where page > 1:
                    return ("/search", ["q": query, "offset": Router.perPage * page])
                case .Search(let query, _):
                    return ("/search", ["q": query])
                }
            }()
    
            let URL = NSURL(string: Router.baseURLString)!
            let URLRequest = NSURLRequest(URL: URL.URLByAppendingPathComponent(path))
            let encoding = Alamofire.ParameterEncoding.URL
    
            return encoding.encode(URLRequest, parameters: parameters).0
        }
    }
  3. Gibt es 2 Möglichkeiten zum übergeben von Parametern:
    case CreateUser([String: AnyObject])
    case ReadUser(String)
    case UpdateUser(String, [String: AnyObject])
    case DestroyUser(String)

    und (sagen user hat 4 Parameter)

    case CreateUser(String, String, String, String)
    case ReadUser(String)
    case UpdateUser(String, String, String, String, String)
    case DestroyUser(String)

    @mattt ist mit dem ersten Beispiel. Aber das wird dazu führen, "hardcoding" Parameter' Namen außerhalb des Routers (z.B. in UIViewControllers).
    Tippfehler im parameter name kann dazu führen, Fehler.
    Andere Menschen sind mit der 2. option, aber in diesem Fall ist es nicht unbedingt offensichtlich, was die einzelnen parameter darstellt.
    Was ist der richtige Weg, es zu tun?

InformationsquelleAutor der Frage OgreSwamp | 2015-02-04

Schreibe einen Kommentar