我正在看一個關于 Swift 中的 MVVM 及其作業原理的講座,我基本了解 Model 將包含資料和邏輯,ViewModel 將這些資料傳遞給 View,也許會對其進行一些清理,并且 View 也可以呼叫 Intent 函式ViewModel 通知 Model 一些需要修改的東西。
現在我知道我并沒有太多的背景關系,但是這里有很多講座,我現在無法真正解釋所有內容,但基本上我們正在制作記憶卡游戲,現在我們正在將其更改為一種 MVVM 設計模式(以前??沒有)。該模型當前包含一個 Card 結構和一個選擇函式來選擇一張卡片和類似的東西,但由于某種原因,講師將一組表情符號(游戲中卡片的內容)放在 ViewModel 中而不是 Model 中。
我認為模型應該是存盤資料的模型而不是視圖模型?任何人都可以嘗試解釋為什么這樣做嗎?
視圖模型:
import SwiftUI
class EmojiMemoryGame //this is the ViewModel
{
static let emojis = ["floaf","taco","george","chicken","squeaky","cat","dollar","a","b","c","d","e","f","g","h"] // these are supposed to be the emojis I just used some words instead.
static func createMemoryGame() -> MemoryGame<String>
{
MemoryGame<String>(numbersOfPairsOfCards: 4) { pairIndex in emojis[pairIndex]}
}
private var model : MemoryGame<String> = createMemoryGame()
var cards: Array<MemoryGame<String>.Card>
{
model.cards
}
}
模型:
import Foundation
struct MemoryGame<CardContent> //MemoryGame is the model for the MVVM pattern
{
private(set) var cards : Array<Card>
func choose(_ card: Card)
{
}
init(numbersOfPairsOfCards: Int, createCardContent: (Int) -> CardContent)
{
cards = Array<Card>()
//add numbersOfPairsOfCards*2 to cards array.
for pairIndex in 0..<numbersOfPairsOfCards
{
let content = createCardContent(pairIndex)
cards.append(Card(content: content))
cards.append(Card(content: content))
}
}
struct Card
{
var isFaceUp: Bool = false
var isMatched: Bool = false
var content: CardContent
}
}
uj5u.com熱心網友回復:
這完全是主觀的,MVVM 只是一種設計模式,不需要嚴格遵守。
請注意,在 MVVM 中,給定視圖通常由單個 ViewModel “支持”,并且 VM 可能與許多不同的模型互動。如果要跨視圖共享資料,它可能屬于某個共享模型。如果資料僅用于單個視圖,則在 VM 上可能沒問題。
uj5u.com熱心網友回復:
我也知道并理解您指的是哪個講座。
Model 用于存盤資料,但 VM 是中間人,可以使用 Model 計算資料或更新 View,而無需讓 View 直接訪問 Model。ViewModel 也會在收到來自 View 或 User 的任何特定互動時更新 Model。您無需處理或計算模型內部的任何資料來更新視圖。您必須使用 ViewModel。
此外,在這種情況下,“表情符號”陣列并不是真正的主要模型。它只是一個字串陣列而不是“卡片”。表情符號用于存盤初始化“模型”的資料。將其視為來自用戶的輸入,您需要將其傳遞給您的模型,否則如果您沒有任何資料要存盤或初始化,則不需要模型。
主要的模型仍然是“卡片”,而“卡片”在這個背景關系中仍然是完全抽象的。
ViewModel 的作業是像中間人一樣計算資料,然后將其傳遞給模型或更新視圖。此外,ViewModel 完全有可能擁有自己實作的變數來幫助 VM 和 Model 或 VM 和 View 之間的程序。
總而言之,Model 不做任何處理、計算、直接與 View 互動。模型只存盤資料。ViewModel 完成所有的計算、處理和初始化。
uj5u.com熱心網友回復:
ViewModel是對底層概念的常見錯誤解釋,源于我們在編程語言中缺乏混淆意圖的空間。您實際使用的是View Model,可通過 SwiftView.Model或Model.View...
struct CardView: View {
struct Model: DynamicProperty {
extension MemoryGame.Card {
struct View: SwiftUI.View
…或者,當它是多個視圖而不是一個視圖的模型時,這稱為Store:
final class Store: ObservableObject {
盡管 MVVM 是 Apple 基本上拒絕的跨平臺術語,但每個視圖都有一個模型,無論您是否將其抽象為單獨的型別。視圖模型是視圖需要自己繪制的任何東西。除此之外的任何東西都是其他東西的模型,不屬于該型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/496751.html
