Model

เริ่มจากโมเดลกันก่อน

ให้เราสร้างไฟล์ใหม่ ด้วยการคลิ๊กขวาที่โฟลเดอร์ TodoApp ใน Project navigator เลือก New File...

จากนั้นเลือก Swift File กด Next

ตั้งชื่อไฟล์เป็น Todo.swift เนื่องจากไฟล์นี้จะเป็นโค้ดของแอป ไม่ใช่โค้ดเทส ให้เลือก Target เป็น TodoApp เท่านั้น แล้วกด create

Xcode จะแสดงไฟล์ที่เพิ่งสร้างให้เรา

ถ้าเรา enable Git เอาไว้ในตอนสร้างโปรเจค ที่ท้ายชื่อไฟล์จะมีสัญลักษณ์ขึ้นเมื่อมีการแก้ไข เช่น

M คือมีการแก้ไขไฟล์ที่ Git ได้ track ไว้แล้ว A คือไฟล์ที่ Git ได้ add แล้ว ? ที่ท้ายชื่อไฟล์ของเราเพื่อบอกว่านี่คือ Untracked

Todo.swift

ให้เราเขียนโค้ดดังนี้

Todo.swift
import Foundation

class Todo {
    private var items = [TodoItem]()

    var totalItems: Int {
        items.count
    }

    func item(at index: Int) -> TodoItem {
        items[index]
    }

    func add(item: TodoItem) {
        items.insert(item, at: 0)
    }

    func remove(at index: Int) {
        items.remove(at: index)
    }

    func index(of item: TodoItem) -> Int? {
        items.firstIndex { $0 === item }
    }

    func move(from sourceIndex: Int, to destinationIndex: Int) {
        items.insert(items.remove(at: sourceIndex), at: destinationIndex)
    }
}

class TodoItem {
    var title: String
    var isDone: Bool

    init(title: String, isDone: Bool) {
        self.title = title
        self.isDone = isDone
    }
}

บรรทัดที่ 3 - 29 เป็นการประกาศ Class Todo ที่เก็บรวบรวม TodoItem บรรทัดที่ 31 - 39 เป็น Class TodoItem

บรรทัดที่ 6 - 8 เรียกว่า compute property สามารถ get ค่าได้อย่างเดียวไม่สามารถ set ค่าได้เนื่องจากไม่สามารถเก็บค่าไว้ได้ โดยเมื่อเรียกจะได้จำนวน TodoItem ที่เก็บไว้ใน items กลับไป

บรรทัดที่ 10 - 12 เป็นการประกาศฟังก์ชั่นที่รับ Int และคืนเป็น TodoItem ใช้ในการ get TodoItem ที่เก็บไว้ใน items ตาม index ที่ระบุ

บรรทัดที่ 14 - 16 เป็นการประกาศฟังก์ชั่นที่รับ TodoItem ใช้ในการเก็บ TodoItem เพิ่ม โดยเพิ่มลงไปใน index ที่ 0 ของ items (Prepend)

บรรทัดที่ 18 - 20 เป็นการประกาศฟังก์ชั่นที่ใช้ลบ TodoItem ตาม index ที่ระบุ

บรรทัดที่ 22 - 24 เป็นการประกาศฟังก์ชั่นที่ใช้ในการหา index ของ TodoItem ที่อยู่ใน items

บรรทัดที่ 26 - 28 เป็นการประกาศฟังก์ชั่นที่ใช้ในการย้าย TodoItem ในตำแหน่ง sourceIndex ไปยัง destinationIndex

TodoItem.swift

เนื่องจาก Todo.swift มีคลาส TodoItem ปนอยู่ด้วยจะเป็นการดีกว่าที่เราจะแยกมันออกมาเป็นอีกไฟล์นึงแทน ให้เราสร้างไฟล์ใหม่ชื่อ TodoItem.swift

แล้วย้ายโค้ดมาที่นี่

TodoItem.swift
import Foundation

class TodoItem {
    var title: String
    var isDone: Bool

    init(title: String, isDone: Bool) {
        self.title = title
        self.isDone = isDone
    }
}

Last updated