Collections
struct Post: Codable, Sendable { var title: String var body: String}
let posts = client.collection("posts", type: Post.self)let result = try await posts.list(query: ListQuery( sort: "-_created_at", limit: 20, filter: ["status": .string("published")]))for post in result.items { print(post.title) }print(result.nextCursor as Any) // nil = last pageCursor pagination
Section titled “Cursor pagination”var cursor: String? = nilrepeat { let page = try await posts.list(query: ListQuery(limit: 50, after: cursor)) // process page.items cursor = page.nextCursor} while cursor != nilGet by ID
Section titled “Get by ID”let post = try await posts.get("post_id")
// Expand related recordslet post = try await posts.get("post_id", expand: ["author"])Create
Section titled “Create”let newPost = Post(title: "Hello", body: "World")let created = try await posts.create(newPost)Update (patch)
Section titled “Update (patch)”struct Patch: Encodable, Sendable { let title: String }let updated = try await posts.update("post_id", patch: Patch(title: "Updated"))Delete (soft)
Section titled “Delete (soft)”try await posts.delete("post_id")Restore
Section titled “Restore”let restored = try await posts.restore("post_id")let total = try await posts.count()
// With filterlet published = try await posts.count(filter: ["status": .string("published")])
// Include soft-deletedlet all = try await posts.count(includeDeleted: true)Batch create
Section titled “Batch create”let items = [Post(title: "A", body: "..."), Post(title: "B", body: "...")]let created = try await posts.createMany(items)Filter operators
Section titled “Filter operators”// EqualityFilterValue.string("published")FilterValue.int(42)FilterValue.bool(true)
// Array (IN)FilterValue.strings(["draft", "published"])
// Comparison operatorsFilterValue.op(["gte": .int(18)])FilterValue.op(["lt": .double(100.0)])FilterValue.op(["neq": .string("deleted")])Channel helpers (for realtime)
Section titled “Channel helpers (for realtime)”posts.channel // "collection:posts"posts.mineChannel // "collection:posts:mine" (current user's records)posts.recordChannel(id: "id") // "record:posts:id"posts.recordsChannel // "records:posts"