mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
chore: add docs for nestedType, encode, from and toMap
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user