chore: add docs for nestedType, encode, from and toMap

This commit is contained in:
Chirag Aggarwal
2025-07-25 16:18:52 +05:30
parent 6bd3e6fe96
commit eeed9a08ec
2 changed files with 114 additions and 0 deletions
+57
View File
@@ -113,6 +113,63 @@ func main() {
}
```
### Type Safety with Models
The Appwrite Apple SDK provides type safety when working with database documents through generic methods. Methods like `listDocuments`, `getDocument`, and others accept a `nestedType` parameter that allows you to specify your custom model type for full type safety.
```swift
struct Book: Codable {
let name: String
let author: String
let releaseYear: String?
let category: String?
let genre: [String]?
let isCheckedOut: Bool
}
let databases = Databases(client)
do {
let documents = try await databases.listDocuments(
databaseId: "your-database-id",
collectionId: "your-collection-id",
nestedType: Book.self // Pass in your custom model type
)
for book in documents.documents {
print("Book: \(book.name) by \(book.author)") // Now you have full type safety
}
} catch {
print(error.localizedDescription)
}
```
**Tip**: You can use the `appwrite types` command to automatically generate model definitions based on your Appwrite database schema. Learn more about [type generation](https://appwrite.io/docs/products/databases/type-generation).
### Working with Model Methods
All Appwrite models come with built-in methods for data conversion and manipulation:
**`toMap()`** - Converts a model instance to a dictionary format, useful for debugging or manual data manipulation:
```swift
let user = try await account.get()
let userMap = user.toMap()
print(userMap) // Prints all user properties as a dictionary
```
**`from(map:)`** - Creates a model instance from a dictionary, useful when working with raw data:
```swift
let userData: [String: Any] = ["$id": "123", "name": "John", "email": "john@example.com"]
let user = User.from(map: userData)
```
**`encode(to:)`** - Encodes the model to JSON format (part of Swift's Codable protocol), useful for serialization:
```swift
let user = try await account.get()
let jsonData = try JSONEncoder().encode(user)
let jsonString = String(data: jsonData, encoding: .utf8)
```
### Error Handling
When an error occurs, the Appwrite Apple SDK throws an `AppwriteError` object with `message` and `code` properties. You can handle any errors in a catch block and present the `message` or `localizedDescription` to the user or handle it yourself based on the provided error information. Below is an example.
+57
View File
@@ -66,6 +66,63 @@ func main() {
}
```
### Type Safety with Models
The Appwrite Swift SDK provides type safety when working with database documents through generic methods. Methods like `listDocuments`, `getDocument`, and others accept a `nestedType` parameter that allows you to specify your custom model type for full type safety.
```swift
struct Book: Codable {
let name: String
let author: String
let releaseYear: String?
let category: String?
let genre: [String]?
let isCheckedOut: Bool
}
let databases = Databases(client)
do {
let documents = try await databases.listDocuments(
databaseId: "your-database-id",
collectionId: "your-collection-id",
nestedType: Book.self // Pass in your custom model type
)
for book in documents.documents {
print("Book: \(book.name) by \(book.author)") // Now you have full type safety
}
} catch {
print(error.localizedDescription)
}
```
**Tip**: You can use the `appwrite types` command to automatically generate model definitions based on your Appwrite database schema. Learn more about [type generation](https://appwrite.io/docs/products/databases/type-generation).
### Working with Model Methods
All Appwrite models come with built-in methods for data conversion and manipulation:
**`toMap()`** - Converts a model instance to a dictionary format, useful for debugging or manual data manipulation:
```swift
let user = try await account.get()
let userMap = user.toMap()
print(userMap) // Prints all user properties as a dictionary
```
**`from(map:)`** - Creates a model instance from a dictionary, useful when working with raw data:
```swift
let userData: [String: Any] = ["$id": "123", "name": "John", "email": "john@example.com"]
let user = User.from(map: userData)
```
**`encode(to:)`** - Encodes the model to JSON format (part of Swift's Codable protocol), useful for serialization:
```swift
let user = try await account.get()
let jsonData = try JSONEncoder().encode(user)
let jsonString = String(data: jsonData, encoding: .utf8)
```
### Error Handling
When an error occurs, the Appwrite Swift SDK throws an `AppwriteError` object with `message` and `code` properties. You can handle any errors in a catch block and present the `message` or `localizedDescription` to the user or handle it yourself based on the provided error information. Below is an example.