Section 5/181 menit
5. App Entities: Domain Objects untuk Shortcuts
5. App Entities: Domain Objects untuk Shortcuts
AppEntity merepresentasikan domain object app — item yang bisa dipilih user sebagai parameter intent, seperti kontak, tugas, playlist, atau produk.
Definisi AppEntity
swift
import AppIntents
// Entity merepresentasikan satu item Task di app
struct TaskEntity: AppEntity {
// Identifier unik — digunakan untuk persistent lookup
var id: UUID
var title: String
var isCompleted: Bool
var dueDate: Date?
var priority: PriorityLevel
// Bagaimana entity ini ditampilkan di Shortcuts UI
static var typeDisplayRepresentation: TypeDisplayRepresentation = TypeDisplayRepresentation(
name: "Tugas",
numericFormat: "\(placeholder: .count) tugas"
)
// Representasi satu instance entity
var displayRepresentation: DisplayRepresentation {
DisplayRepresentation(
title: "\(title)",
subtitle: dueDate.map { "Tenggat: \(formatted($0))" } ?? "Tanpa tenggat",
image: .init(systemName: isCompleted ? "checkmark.circle.fill" : "circle")
)
}
// Bagaimana Shortcuts menemukan entity ini (via EntityQuery)
static var defaultQuery = TaskEntityQuery()
}
// Helper formatting
private func formatted(_ date: Date) -> String {
let formatter = DateFormatter()
formatter.dateStyle = .short
return formatter.string(from: date)
}
Mapping dari Domain Model ke AppEntity
swift
// Model layer app — terpisah dari AppEntity
struct Task: Identifiable, Codable {
let id: UUID
var title: String
var isCompleted: Bool
var dueDate: Date?
var priority: PriorityLevel
}
// Extension untuk konversi
extension TaskEntity {
init(task: Task) {
self.id = task.id
self.title = task.title
self.isCompleted = task.isCompleted
self.dueDate = task.dueDate
self.priority = task.priority
}
}
extension Task {
var asEntity: TaskEntity { TaskEntity(task: self) }
}