CloudKit


ULASHISH

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!