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

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

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

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

Todo.swift
ให้เราเขียนโค้ดดังนี้
import Foundation
class Todo {
private var items = [TodoItem]()
var totalItems: Int {
return items.count
}
func item(at index: Int) -> TodoItem {
return 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? {
return items.firstIndex(where: { (todoItem) -> Bool in
return todoItem === item
})
}
func move(from sourceIndex: Int, to destinationIndex: Int) {
let item = items.remove(at: sourceIndex)
items.insert(item, at: destinationIndex)
}
}
class TodoItem {
var title: String
var isDone: Bool
init(title: String, isDone: Bool) {
self.title = title
self.isDone = isDone
}
}
บรรทัดที่ 3 - 32 เป็นการประกาศ Class Todo ที่เก็บรวบรวม TodoItem บรรทัดที่ 34 - 42 เป็น 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 - 26 เป็นการประกาศฟังก์ชั่นที่ใช้ในการหา index ของ TodoItem ที่อยู่ใน items
บรรทัดที่ 28 - 31 เป็นการประกาศฟังก์ชั่นที่ใช้ในการย้าย TodoItem ในตำแหน่ง sourceIndex
ไปยัง destinationIndex
TodoItem.swift
เนื่องจาก Todo.swift มีคลาส TodoItem ปนอยู่ด้วยจะเป็นการดีกว่าที่เราจะแยกมันออกมาเป็นอีกไฟล์นึงแทน ให้เราสร้างไฟล์ใหม่ชื่อ 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