見出し画像

SwiftUIの学習メモ

SwiftUIを使ったiOSアプリ開発を勉強したのでメモ

デザインパターン

基本的なデザインパターンはMVVM
・Model(データ構造)
・View(UIなどの見た目)
・ViewModel(ModelとViewへの処理)
WindowsのWPFではView部分だけXamlファイルなのに対して、 全てSwiftファイルで記述できるので、わかりやすく自由度が高い印象

Viewの書き方

・Viewクラスを継承したクラスを作成する
・bodyプロパティを定義
・bodyの中にはさらにViewのインスタンスを箇条書き
・各Viewに対してModifierを指定してサイズや色などを調整

struct SampleView: View {
   var body: some View {
        Image("loading")    // View
            .resizable(resizingMode: .stretch)    //Modifier
            .aspectRatio(contentMode: .fill)
            .frame(width: 200.0, height: 150.0)
            .offset(x: 10, y: -40)
        Text("text")    //View
            .padding()  //Modifier
   }
}

body内のImageやTextなどはSwiftでもとから使えるViewでPrimitive Viewというらしい
他にも自分で定義したViewをbody内に追加することができる
View一つ一つが画面を構成する部品のような感じで、Viewを組み合わせてViewを作り、そのViewをさらに組み合わせて一つの画面を作っていく

WPFに比べると自由度が高い分少しViewが膨らんでる気がする

ViewModel

CombineをimportすることでReactivePropertyのような機能を利用できる

import Foundation
import Combine

class SampleViewModel: ObservableObject {

   @Published var textField = ""
   private var sampleTask: AnyCancellable?

   init() {
       sampleTask = self.$textField
           .sink() { text in
               guard !text.isEmpty else {
                   return
               }
               // textFieldが変更された時に実行される処理
           }
   }
}

Combineの機能についてはそのうち別の記事に

触ってみた感想

Swiftの文法が少し独特なので少し手間取るけれど、MVVMとしての書きやすさはWPFよりも上かも?
かなり直感的に書けるのでコードの可読性も高そうだなという所感

この記事が気に入ったらサポートをしてみませんか?