オリジナルクラスでURLSession周りにつまづく
全てを事前準備されたViewControler.swiftで完了する時は楽だった。つまるところ密結合は楽だった。
JSON形式データのダウンロードは共通要素
NASA APIは複数のAPIが用意されているけれど、「API URLを指定してJSON形式データのダウンロード」はいずれも変わらない。
なので、API URLを引数にJSON形式データを戻り値にした関数(または類似の分け方)を作ろうと考える。
URLSessionDownloadDelegateで怒られる
試しと新規classを作成してURLSessionDownloadDelegateを付ける。
class TestClass: URLSessionDownloadDelegate {
}
すると、
Type 'TestClass' does not conform to protocol 'NSObjectProtocol' Do you want to add protocol stubs?
と怒られる。Fix
ボタンをクリックすると、大量のfunc
が追加されて1つ1つがわからなかった。
参考にさせていただいたページでは、これらのfunc
が無くても大丈夫そうなので、わたしの書き方に不足があるのだろう。
非同期処理はイメージが難しい
基本的にプログラムは上から順に流れることしかしてこなかった。非同期処理は終わらずに次々進んでいってしまうことから、順番にこなした時は監視する必要があるのだろうか。
URLSessionでタスク開始時、進行中、終了時のそれぞれで呼び出されるfunc
が用意されている。しかしこの間、URLSessionに処理を要求した側は、タスク終了を待って進む必要がある時は、タスク終了を監視するのだろうか。
最初から一気に外部クラス・外部関数に分けるのではなく、結合度を気にせず動くものを作ってから、少しずつ結合度を下げるのが身の丈に合ってるか。
環境
- Xcode Version 9.1 (9B55)
- Swift version 4.0.2
- macOS歴 一ヶ月弱
いつからSwiftが4.xになっていたのだろう。。。