オリジナルクラスで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になっていたのだろう。。。