iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
Mobile Development

Xcode x Swift Vibe coding進階開發之旅系列 第 5

Development Xcode x Swift Vibe coding進階開發之旅 第五天 點名系統(1) 下指令建立realm資料架構

  • 分享至 

  • xImage
  •  

輸入的指令

只有一行字:https://ithelp.ithome.com.tw/upload/images/20250919/201681877Dtz9lT57x.png

結果

AI回覆我以下內容並且編輯空白檔案檔案/images/emoticon/emoticon02.gif
回覆內容:
https://ithelp.ithome.com.tw/upload/images/20250919/20168187pi1xbFJDl0.png
新增的程式碼:


import Foundation
import RealmSwift

// 人員名單資料表
class Person: Object {
    @Persisted(primaryKey: true) var id = UUID().uuidString
    @Persisted var name: String = ""
    @Persisted var email: String?
    @Persisted var createdAt = Date()
    
    convenience init(name: String, phoneNumber: String? = nil, email: String? = nil) {
        self.init()
        self.name = name
        self.email = email
    }
}

// 簽到記錄資料表
class CheckInRecord: Object {
    @Persisted(primaryKey: true) var id = UUID().uuidString
    @Persisted var person: Person?
    @Persisted var checkInTime = Date()
    @Persisted var note: String?
    
    convenience init(person: Person, note: String? = nil) {
        self.init()
        self.person = person
        self.note = note
    }
}

// Realm資料庫管理類別
class RealmManager {
    static let shared = RealmManager()
    private var realm: Realm?
    
    private init() {
        do {
            realm = try Realm()
        } catch {
            print("初始化Realm失敗: \(error)")
        }
    }
    
    // 新增人員
    func addPerson(name: String, phoneNumber: String? = nil, email: String? = nil) -> Person? {
        guard let realm = realm else { return nil }
        let person = Person(name: name, phoneNumber: phoneNumber, email: email)
        
        do {
            try realm.write {
                realm.add(person)
            }
            return person
        } catch {
            print("新增人員失敗: \(error)")
            return nil
        }
    }
    
    // 獲取所有人員
    func getAllPersons() -> Results<Person>? {
        return realm?.objects(Person.self).sorted(byKeyPath: "name")
    }
    
    // 根據ID獲取人員
    func getPerson(byId id: String) -> Person? {
        return realm?.object(ofType: Person.self, forPrimaryKey: id)
    }
    
    // 新增簽到記錄
    func addCheckInRecord(person: Person, note: String? = nil) -> CheckInRecord? {
        guard let realm = realm else { return nil }
        let record = CheckInRecord(person: person, note: note)
        
        do {
            try realm.write {
                realm.add(record)
            }
            return record
        } catch {
            print("新增簽到記錄失敗: \(error)")
            return nil
        }
    }
    
    // 獲取所有簽到記錄
    func getAllCheckInRecords() -> Results<CheckInRecord>? {
        return realm?.objects(CheckInRecord.self).sorted(byKeyPath: "checkInTime", ascending: false)
    }
    
    // 獲取特定人員的簽到記錄
    func getCheckInRecords(forPerson person: Person) -> Results<CheckInRecord>? {
        return realm?.objects(CheckInRecord.self).filter("person.id == %@", person.id).sorted(byKeyPath: "checkInTime", ascending: false)
    }
    
    // 獲取特定日期的簽到記錄
    func getCheckInRecords(forDate date: Date) -> Results<CheckInRecord>? {
        let calendar = Calendar.current
        let startOfDay = calendar.startOfDay(for: date)
        let endOfDay = calendar.date(byAdding: .day, value: 1, to: startOfDay)!
        
        return realm?.objects(CheckInRecord.self)
            .filter("checkInTime >= %@ AND checkInTime < %@", startOfDay, endOfDay)
            .sorted(byKeyPath: "checkInTime")
    }
}


上一篇
Xcode x Swift Vibe coding進階開發之旅 第4天 xcode for copilit的使用
系列文
Xcode x Swift Vibe coding進階開發之旅5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
yulin494
iT邦新手 4 級 ‧ 2025-09-19 21:25:35

請問一行指令中這麼多錯字是在考驗Agent理解能力嗎?還是說有其他用途?/images/emoticon/emoticon01.gif

我要留言

立即登入留言