SwiftUI_Refreshable

こんにちは、EveryDaySoft代表の永田です。

今回はSwiftUIの新機能Refreshableについて解説します。

https://twitter.com/dbank0208/status/1455625009146126340?s=20

少し前はSwiftUIではスクロールし、通信データ取得をする場合に取得中を見た目として表示する機能がありませんでしたので、今までは自前で作成していました。

具体的には

//
//  Spinner.swift
//  SwiftUI_SearchGithub
//
//  Created by 永田大祐 on 2020/04/07.
//  Copyright © 2020 永田大祐. All rights reserved.
//

import SwiftUI

struct Spinner: UIViewRepresentable {
    var isAnimating: Bool
    let style: UIActivityIndicatorView.Style

    func makeUIView(context: Context) -> UIActivityIndicatorView {
        let spinner = UIActivityIndicatorView(style: style)
        spinner.hidesWhenStopped = true
        return spinner
    }

    func updateUIView(_ uiView: UIActivityIndicatorView, context: Context) {
        isAnimating ? uiView.startAnimating() : uiView.stopAnimating()
    }
}

SwiftUIでUIKitの機能を使用できるプロトコルUIViewRepresentableを使いアニメーションロジックを作成していました。iOSのプロトコルはインターフェースです。

UIActivityIndicatorViewはデータ取得するアニメーションデザインです。このアニメーションデザインをカスタマイズをする場合は従来通り、UIViewRepresentableを使用してデザイン部分も実装する必要がありますが、シンプルなリロードで問題ない場合は実装がこれだけですみます。

            .refreshable {
                somtething
            }

今回の機能は、通信データ取得をする場合に取得中を見た目として表示する最速手です。

プログラムも実施するための考える事が少ないと考えることに集中できます。考えることに集中できると、汎用的なプログラムが書けたりします。

これとこれの場合はこうする。こうした場合にこの時はこう。といった条件を増やす程にプログラムは大変になってきます。なので全体構成がシンプルであれば使用者が直感的に使用できるアプリケーションになってきます。プログラムを知らなくとも直感的な仕様を作れると、プログラムでも似た作業になります。

例えば、これとこれの場合はこれとこれです。

簡単にするのも簡単ではないかも知れませんが、様々な機能をとても使用する場合には大事な考えだと思います。様々な機能をとても使用する場合を思い描けると良いと思います。仮に直感的ではない仕様で、様々な機能をとても使用する場合(機能を使用する場合に各条件が無数にある)これだと目的を果たすために機能を覚えるのが目的になっています。もともと目的のためには、機能は必須だったのでしょうか。

機能を使用する場合は目的が必要で、機能が目的ではないので、目的を果たすためにはどうするかといった部分を考えるのが大事だと思いました。

プログラム開発は機能が目的だったりする場合もあります。

以上、貴重なお時間お読み下さいまして誠にありがとうございます。