【プログラミング】SwiftUIでアプリ作る【2日目】

構造体データを配列に入れる。

昨日これが良く分からなかったまま床に就いたのですが、気になって眠れず深夜3時くらいまでXcodeをこねくり回してみたところ、若干ではありますが整理できました。

 

まずは昨日書いた、「構造体を定義する」ことから

→struct Data: Identifiable{

      var id: Int

      var titleName: String

     }

 

この構造体の形でデータを作って配列にしたいので、関数「makeData()」を定義します。

→func makeData() ->[Data] {

     var dataArray:[Data] = []

     dataArray.append(Data(id: 1, titleName: "SwiftUIでアプリを作る1日目"))

     dataArray.append(Data(id: 1, titleName: "SwiftUIでアプリを作る2日目"))

 ・・・

     return dataArray

}

 

"func makeData() ->[Data]" は処理の結果を「Data構造体」で返すmakeData()関数を定義しています。他の部分はmakeData()関数の処理の部分で、dataArrayと仮定義した配列に「Data構造体」型のデータを追加しています。

 

これだけだとmakeData関数を作っただけなので、実際にこれを使った変数を定義して配列「blogArray」にmakeData()関数によってデータを入れたいと思います。

→var blogArray:[Data] = makeData()

 

「Data構造体」型のblogArrayはmakeData()関数によってデータが入れられ、配列になるはずです。

 

配列を使ってリストを作る

List()←この括弧内には配列の範囲(レンジ)を指定するのですが、今回は括弧内に直接配列である「blogArray」を入れれば良いみたいです。(構造体で指定したデータを入れた配列だから?)

→struct ContentView: View {

     var body: some view {

          List(blogArray) { item in

               Text(Data.titleName: item)

          }

     }

}

とかでできるのかな?「item in」を使って配列から一つずつデータを取り出しているらしいです。

 

ライブラリを使いたい!

昨日も言ってましたが、自分が作りたいアプリには様々な機能が必要なので、色々なライブラリを使うのが良いです。しかしSwiftUIくんはまだ新しいので対応しているライブラリが少ないらしく(正確には"対応している"などの表現は正しくはありませんが…)、一方でSwiftUIだけでアプリを作るには力不足なようです。

 

とはいったものの、初心者の僕を拾ってくれたSwiftUIを使いたいので、使えるライブラリを探したところ色々あるみたいです。

 

参考:SwiftUIおすすめライブラリ!!

qiita.com

 

他にもアプリ内でデータベースを扱える「RealmSwift」やアプリ開発のバックエンド環境を提供してくれる「firebase」などはぜひとも使いたいものです。

 

それらのライブラリのインストールには「CocoaPods」なるものが必要なので、すでに機能の時点で導入をしていました。が、その後の手順を真似してもなぜかライブラリが使えませんでした…。(使える場合は"import RealmSwift"のようにすると使える)

 

その時参考にした動画:Realm Database With SwiftUI - CRUD Operations On Realm Database With SwiftUI - Realm With SwiftUI

www.youtube.com

 

困りながら同じ現象に陥った人を調べてみると、幸いにも対処法込で書かれているサイト様を発見できました。

 

参考:swiftで外部モジュールのimportエラー

programming-practice.hateblo.jp

 

このサイト様にあるように「コマンド+B」を押せばpod fileが読み込まれてしっかりと使えるようになりました。めでたしめでたし。

 

おわりに

今日は色々調べるのに時間がかかってしまったので、今日の夜、「RealmSwift」などのライブラリがどう使えるのかを手探りで触って(よくわからない可能性が高いので他のことをやるかもしれませんが)、明日ここにお伝えしたいと思います。