建立模型

一切的一切都要從資料說起,如果沒有資料,無論對視圖有多瑰麗的想像,也無法進行繪製。

// 結構:Position,代表一個2D座標系上的點
struct Position {
    var x: Int
    var y: Int
}

// 類別:World,代表世界的 Model 角色
class World {
    var width: Int         // 世界寬度
    var height: Int        // 世界高度
    var blocks: [[Int]]    // 世界格資訊陣列
    var worldView: UIView? // 用於連結世界視圖的變數
}

// 類別:Block,代表方塊的 Model 角色
class Block {
    var position: Position  // 方塊位置
    var world: World?       // 所屬世界
    var title: String       // 方塊上顯示的文字
    var blockView: UILabel? // 用於連結方塊視圖的變數
}

對於方塊和世界,由於它們是屬於抽象物件類別的Class,必須手動幫它們撰寫好初始化指令:

class World {
    ...

    // 以指定長和寬的方式初始化世界,其所有世界格,在這種方式下初始化為數值 1
    init(_ w:Int, _ h:Int) {
        self.width = w
        self.height = h
        self.blocks = Array(repeating: Array(repeating: 1, count: w), count: h)
    }
}

class Block {
    ...

    // 以指定X座標、Y座標和標題的方式初始化方塊
    init(title: String, x: Int, y: Int) {
        self.title = title
        self.position = Position(x: x, y: y)
    }
}

眼尖的你或許會發現我們並沒有初始化所有屬性,例如WorldworldView,或者Blockworld,由於這些屬性是Optional屬性,因此在初始化時如果沒有指定值,將自動指定為nil。由於世界不一定非得有一個視圖(除非要確實繪製出來,否則即使沒有視圖,仍能操作世界的Model,但少了長寬,顯然無法確實得清楚定義一個世界),方塊也不一定非得存在一個世界中,因此把這些屬性設置為Optional屬性,在需要時才賦值是很恰當的。

results matching ""

    No results matching ""