Я прочитал пару учебных пособий, README от @mattt, но не могу понять, что с ними связано.
-
Какое правильное использование
URLRequestConvertible
в API реального мира? Похоже, если я создам один маршрутизатор, выполнив протоколURLRequestConvertible
для всех API - он будет едва читаемым. Должен ли я создать один маршрутизатор на конечную точку? -
Второй вопрос, скорее всего, вызванный отсутствием опыта с языком Swift. Я не могу понять, почему
enum
используется для построения маршрутизатора? Почему мы не используем класс со статическими методами? вот пример (из 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 } }
-
Есть два способа передачи параметров:
case CreateUser([String: AnyObject]) case ReadUser(String) case UpdateUser(String, [String: AnyObject]) case DestroyUser(String)
и (скажем, пользователь имеет 4 параметра)
case CreateUser(String, String, String, String) case ReadUser(String) case UpdateUser(String, String, String, String, String) case DestroyUser(String)
@mattt использует первый пример. Но это приведет к именам параметров "жесткого кодирования" за пределами маршрутизатора (например, в UIViewControllers). Typo в имени параметра может привести к ошибке.
Другие люди используют 2-й вариант, но в этом случае это совершенно не очевидно, что представляет каждый параметр.
Каким будет правильный способ?