如標題。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 巨集產生的,看下圖紅色圈起來的部分。
設定索引非常的簡單,使用 SwiftData 來儲存資料的 App,記得要設索引啦。