REST APIとSwiftUI
原文は Ellie Huxtable により に公開されました。 このブログを購読する
最近、SwiftUIのViewでREST APIからデータを取得して描画する方法をどうしているのかと聞かれました。
Reactのようなものから来た人なら、やり方は実際には異なることに気づくでしょう。initやonAppearの中でリクエストを投げて@Stateを更新する、といった単純なことはできません。escapingクロージャの扱いづらさや、structがミュータブルでないことなどなど、色々と厄介なことがあります。
幸い、SwiftUIにはそれを助けてくれる仕組みが用意されています :) GETリクエストの送り方などの詳細はここでは触れませんが、私はJustを使うのが好きです。
まずは、Viewを用意してみましょう
struct UserProfile: View {
@ObservedObject user: User = User(username: "elm", name: "Ellie")
var body: some View {
VStack {
Text("Username: \(self.user.username)")
Text("Name: \(self.user.name)")
}
}
}では、ここのuserオブジェクトをどうやって読み込むのでしょうか?@Stateでしょうか?
実は違います。ObservableObjectというものがあります。これは@Publishedプロパティを持つオブジェクトです。@Publishedプロパティが更新されると、そのオブジェクトを含むViewで更新がトリガーされます。
例を見た方が分かりやすいでしょう
struct User: ObservableObject {
@Published var username: String
@Published var name: String
init(username: String, name: String) {
self.username = username
self.name = name
self.load()
}
func load() {
somehowRequestDataAsynchronously();
// so basically just change `username` or `name` in here
}
}Viewは本質的に「観測可能な」何かを「観測」しているわけです — @ObservedObjectと@ObservableObjectですね。観測しているオブジェクトの@Publishedプロパティが更新されると、すぐに再描画がトリガーされてViewが更新されます!
これで疑問が解消されたら嬉しいです!
記事をランダムに読む
コメント
ログインしてコメントする