CloudKit
CloudKit
CloudKit konteynerlari, yozuvlari (records) va so‘rovlari yordamida ilova ma’lumotlarini iCloud orqali qurilmalar o‘rtasida sinxronlang.
Sozlash va konteyner
iCloud va CloudKit imkoniyatini (capability) yoqing, so‘ng konteyner va ma’lumotlar bazasidan foydalaning.
Sintaksis:
let container = CKContainer.default()let db = container.privateCloudDatabase
Misol
import CloudKit
let container = CKContainer.default()
let db = container.privateCloudDatabase
import SwiftUI
struct ContentView: View {
var body: some View {
Text("CloudKit Setup")
.padding()
}
}
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup { ContentView() }
}
}
Bu foydalanuvchining shaxsiy (private) ma’lumotlar bazasiga murojaat obyektini tayyorlaydi.
Yozuvni saqlash
Maydonlarga ega CKRecord yarating va uni ma’lumotlar bazasiga saqlang.
Sintaksis:
let rec = CKRecord(recordType: "Type")db.save(rec) { ... }
Misol
import CloudKit
func addNote(title: String, body: String, completion: @escaping (Result) -> Void) {
let rec = CKRecord(recordType: "Note")
rec["title"] = title as CKRecordValue
rec["body"] = body as CKRecordValue
CKContainer.default().privateCloudDatabase.save(rec) { saved, err in
if let saved = saved { completion(.success(saved)) } else { completion(.failure(err!)) }
}
}
import SwiftUI
struct ContentView: View {
var body: some View {
Text("CloudKit Save Example")
.padding()
}
}
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup { ContentView() }
}
}
Ushbu misol shaxsiy ma’lumotlar bazasiga oddiy Note yozuvini yozadi.
Yozuvlarni so‘rov orqali olish
Predikatga mos keladigan yozuvlarni CKQuery yordamida oling.
Sintaksis:
CKQuery(recordType:predicate:)db.perform(query, inZoneWith:)
Misol
import CloudKit
func loadNotes(completion: @escaping (Result<[CKRecord], Error>) -> Void) {
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Note", predicate: predicate)
CKContainer.default().privateCloudDatabase.perform(query, inZoneWith: nil) { records, err in
if let records = records { completion(.success(records)) } else { completion(.failure(err!)) }
}
}
import SwiftUI
struct ContentView: View {
var body: some View {
Text("CloudKit Query Example")
.padding()
}
}
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup { ContentView() }
}
}
Ushbu misol barcha Note yozuvlarini yuklaydi. Production’da katta natijalar to‘plamlari uchun kursorlar yoki operatsiyalarni afzal ko‘ring.
Maslahat: Loyihani yakuniy muvofiqlik (eventual consistency) tamoyiliga moslab tuzing va tarmoq nosozliklarini muloyimlik bilan qayta ishlang.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
