Lecture 2: MVVM and the Swift Type System


Stanford CS 193 p iPhoneアプリケーション開発Spring 2020をYouTubeで聴取し記録した.

Architecture


MVVM: design pattern


Model-View-VewModel

  • 「コード組織」設計モード
  • は、「応答」ユーザインタフェースとともに
  • を使用する.
  • SWIFTUIとともに
  • を使用する必要があります
  • UIKEで使用するモデルビューコントローラとは異なり、


  • 「The Truth」:異なる場所にデータを格納するか、異なるバージョンがない

  • Declared:UIで宣言されている関数は、いつでも独立して呼び出すことができます.localize code. UIを表示する他のコードは分散ではなくread-onlyなので予測できる.

  • コマンド:関数間の依存性(関数が実行され、別の関数が実行される)のため、ユーザーが関数を呼び出してUIを随時変更しようとすると、管理が困難になります.

  • Reactive:モデルが変更されると、ビューも自動的に変更されます.

  • Model -> View
    View Modelは、Viewがモデルに使用するポータル・チャネルです.
    Viewは共有することが多いのでクラスです
    View ModelにはViewへのポインタがありません.(ビューは出版物、モデルを直接購読しません)
    モデルの変更について理解する(structのコピー、HTTPリクエスト、またはSQLデータベースへのアクセス)
    可能性「解釈」:中間的に解釈しても解釈しなくてもよい
    publish「something changed」:変化を表す

  • 逆方向?View -> Model
    Model View Intent
    ユーザーが画面上でカードをクリック
  • Varieties of Types


    struct, class, protocol, generics(Don't care), enum, functions


    struct, class


    ストレージvar:メモリに格納
    computed var
    constant let
    func
    init
    structclassvaluetypeReference type(heapに格納されている)コピーされたポインタコピー.自動参照カウント機能を書くためのプログラミングオブジェクト向けプログラミングの継承性なし(単一)「Free」init initializes ALL vars「Free」init initializes no vars Mustability.Always mutable(hipでアクセス可能)Your「go to」を明確に宣言する必要がある特定の環境で使用されるデータ構造ビュープロトコルMVVMモデルでのViewModel、UIKEtの使用

    Generics


    don't careタイプ->タイプパラメータ
    例:Arrayのコード
    strct Array<Element> {
    	...
        func append(_ element: Element) {...}
    }
    
    var a = Array<Int>()
    a.append(5)
    a.append(22)
    // 누군가 Array를 '사용'할 때, Element의 타입이 Int로 정해짐

    Functions as Types

    (Int, Int) -> Bool // takes two Ints and returns a Bool
    
    var foo: (Double) -> Void // foo's type: function that takes a Double, returns nothing
    
    func doSomething(what: () -> Bool)  // what's type: function, takes nothing, returns Bool
    
    
    
    var operation: (Double) -> Double  // function that takes a Double and returns a Double
    
    func squre(operand: Double) -> Double {
    	return operand * operand
    }
    
    operation = squre
    let result1 = operation(4)	// 16
    
    operation = sqrt	// 내장함수
    let result2 = operation(4)	// 2
  • エンクロージャを閉じる
    inlined function
    パラメータ伝達関数用
  • ビューの作成
    37分27秒
    次に、モデルの作成を開始します.
    https://cs193p.sites.stanford.edu/