SwiftData 支援索引了

如標題。Xcode 16 在 SwiftData 上支援索引了,設了索引的欄位在搜尋速度上將大幅提昇,對減緩行動裝置電力消耗將大有幫助。

範例如下,使用 #Index 巨集建立了兩個索引,一個是 uid 與 name 合在一起的複合欄位索引,另一個是 birthday 的單一欄位索引。另外一個巨集 #Unique 也是 Xcode 16 的新巨集,用來設定哪些欄位值必須唯一,跟 @Attribute(.unique) 這個巨集功能一樣,但 #Unique 可以設定複合欄位。

import SwiftData

@Model
final class UserInfo {
    #Unique<UserInfo>([\.uid])
    #Index<UserInfo>([\.uid, \.name], [\.birthday])
    
    var uid: String
    var name: String
    var birthday: Date?
    
    init(uid: String, name: String, birthday: Date? = nil) {
        self.uid = uid
        self.name = name
        self.birthday = birthday
    }
}

App 執行後,如果使用可以讀取 sqlite 的資料庫管理系統(例如 DBeaver)就可以看到 UserInfo 資料表中產生了三個索引,最後一個是由 #Unique 巨集產生的,看下圖紅色圈起來的部分。

Screenshot

設定索引非常的簡單,使用 SwiftData 來儲存資料的 App,記得要設索引啦。

發表迴響