Swift4時代からMoyaを使っていて、バージョンアップで昔と書き方が変わっているのは知っていましたがSwiftUIで久しぶりにAlamofireを使ってみました。
ベターな使い方か分かりませんが、使いながらMoyaっぽく書きたいなーと思ったのでそれっぽく書いてみました。
自分でWrapperを作ろうとしたり色々調べてみましたが、結局gitに書いてあるやり方で出来そうな感じでした。
やり方はドキュメントにあるURLRequestConvertible
を使用します。
enum Router: URLRequestConvertible {
case get, post
var baseURL: URL {
return URL(string: "https://httpbin.org")!
}
var method: HTTPMethod {
switch self {
case .get: return .get
case .post: return .post
}
}
var path: String {
switch self {
case .get: return "get"
case .post: return "post"
}
}
func asURLRequest() throws -> URLRequest {
let url = baseURL.appendingPathComponent(path)
var request = URLRequest(url: url)
request.method = method
return request
}
}
AF.request(Router.get)
公式のAdvancedUsageのドキュメントではこのようにgetやpostで分岐させていますが、単純にこれを任意のエンドポイントごとに定義することでMoyaでやっていたようなやり方で運用できます。
enum Router: URLRequestConvertible {
case hoge
case fuga
var method: HTTPMethod {
switch self {
case .hoge: return .get
case .fuga: return .post
}
}
~以下省略~