整理[OS]Table View(3)


もうすぐ最後の時間だ
前回は直接URLセッション、画像URLキャッシュを実現していましたが、今回はライブラリを使用します.

  • URLセッションを使用してTable Viewにデータを表示する

  • より効率的なコードの作成
  • 3.AlamoFireとKingFisherを適用する

    なぜAlamoFireを使うのですか?


    https://github.com/Alamofire/Alamofire
    Alamofire is an HTTP networking library written in Swift.
    URLセッションよりもネットワーク通信が容易なライブラリ.
    まず、SWIFTパッケージマネージャでAlamoFireをインストールし、AlamoFireをインポートします.
    使い方からすると、
    let parameters: Parameters = [
        "country": "kr",
        "apiKey": "967a51965f9e4eec9e13b5ca4adf46f6"
    ]
    
    let dataRequest = AF.request(testLink, method: .get, parameters: parameters)
    
    dataRequest
        .validate(statusCode: 200..<300)
        .responseDecodable(of: NewsList.self) {response in
            if let data = response.value?.articles {
                completion(.success(data))
            }
        }
    前のURL Sessionをそのまま使うときのロングコードは簡単になりますよね!
    各種のエラー検証.validate()を使用して処理できます.
    オートデコードの様子が見られます

    なぜKingFisherを使うのですか?


    https://github.com/onevcat/Kingfisher
    Kingfisher is a powerful, pure-Swift library for downloading and caching images from the web. It provides you a chance to use a pure-Swift way to work with remote images in your next app.
    私たちはimageViewのimageにimageURLを適用するためにいろいろなことをしました.
    KingFisherを使用すると、すべての処理(バックグラウンドの非同期ダウンロード、キャッシュ、プリフェッチ)を簡単に実行できます.
    驚くべきことに、次のコードはダウンロードとキャッシュを処理することもできます.
    cell.contentImage.kf.setImage(with: url, placeholder: UIImage(systemName: "photo.circle.fill"), options: nil, completionHandler: nil)
    そして、次の2行のコードがプリフェッチRowsAtで実装されると、ユニットプリフェッチ実装は終了する.
    let urls = indexPaths.compactMap {list[$0.row].urlToImage}.compactMap{URL(string: $0)}
    ImagePrefetcher(urls: urls).start()
    この味に倉庫を書いたのか.
    本当は一つずつライブラリを開こうと思っていたのですが….今は私には難しすぎます.ううう
    今日は使い方を身につけることに満足しています.これからもっと勉強してから帰ってきます.
    このように終わるのは少し残念ですが、refreshControlを適用してから終わります.

    UIリフレッシュ制御の適用


    私は新しい概念に触れると正式なドキュメントを読む習慣を身につけるように努力しています.
    (もちろん今は…?ブログの方が便利だけど…)
    公式文書では、UIscrollViewオブジェクトが持つデフォルトのコントロールオブジェクトです.
    使いやすいです.
    refreshControlはtableViewのrefreshControlプロパティに格納されます.
    addTargetでセレクタを指定できますか?
    アップルの例
    func configureRefreshControl () {
       // Add the refresh control to your UIScrollView object.
       myScrollingView.refreshControl = UIRefreshControl()
       myScrollingView.refreshControl?.addTarget(self, action:
                                          #selector(handleRefreshControl),
                                          for: .valueChanged)
    }
        
    @objc func handleRefreshControl() {
       // Update your content…
    
       // Dismiss the refresh control.
       DispatchQueue.main.async {
          self.myScrollingView.refreshControl?.endRefreshing()
       }
    }
    私も同じ何も難しくない!

    結果



    ここで終わりたいと思っていたのですが、今回はtableViewのすべての属性について直接お話ししましょう
    次はcellの削除と移動を書きます!
    完全なコードは、次のリンクgithub repoにあります.(commitを参照してください.表示が便利です!)