0Pricing
Swift Academy · บทเรียน

App Intents และทางลัด

เปิดให้ Siri และทางลัดเรียกใช้การทำงานได้

App Intents และทางลัด เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

App Intents คืออะไร

เฟรมเวิร์ก App Intents เปิดเผยการทำงานของแอปให้ระบบใช้งานได้ เช่น Siri, Shortcuts, Spotlight วิดเจ็ต และปุ่มการดำเนินการ คุณอธิบายการทำงานหนึ่งครั้งในรูปชนิดของ Swift แล้วการทำงานนั้นจะพร้อมใช้งานได้ทุกที่ ทั้งควบคุมด้วยเสียงและทำงานอัตโนมัติได้

import AppIntents
// Define an action as a type; the system can run it
// from Siri, Shortcuts, Spotlight, widgets, etc.

การกำหนด AppIntent

อินเทนต์ต้องสอดคล้องกับ AppIntent ประกาศ title ที่ผู้ใช้มองเห็น และใช้งาน perform() ซึ่งดำเนินการแล้วคืนค่าผลลัพธ์ เฟรมเวิร์กจะค้นพบอินเทนต์นี้โดยอัตโนมัติ ไม่ต้องลงทะเบียน

import AppIntents
struct AddTaskIntent: AppIntent {
    static var title: LocalizedStringResource = "Add Task"
    func perform() async throws -> some IntentResult {
        // create the task here
        return .result()
    }
}

พารามิเตอร์

ใช้ตัวห่อคุณสมบัติ @Parameter เพื่อขอข้อมูลนำเข้าจากผู้ใช้หรือ Siri ระบบจะแจ้งขอค่าที่ขาดหายและตรวจสอบความถูกต้องให้ พารามิเตอร์แต่ละรายการมีชื่อเรื่องที่แสดงในตัวแก้ไข Shortcuts

import AppIntents
struct AddTaskIntent: AppIntent {
    static var title: LocalizedStringResource = "Add Task"
    @Parameter(title: "Title")
    var taskTitle: String
    func perform() async throws -> some IntentResult {
        return .result()
    }
}

การส่งคืนค่าและกล่องโต้ตอบ

อินเทนต์สามารถส่งคืนข้อมูลและพูดยืนยันได้ รูปแบบต่าง ๆ ของ IntentResult เช่น .result(value:dialog:) ช่วยให้คุณส่งคืนค่าที่มีชนิด พร้อมกล่องโต้ตอบที่พูดหรือแสดงผล ซึ่ง Siri จะอ่านกลับให้ผู้ใช้ฟัง

import AppIntents
struct CountTasksIntent: AppIntent {
    static var title: LocalizedStringResource = "Count Tasks"
    func perform() async throws
        -> some IntentResult & ProvidesDialog {
        let count = 5
        return .result(
            dialog: "You have \(count) tasks")
    }
}

สรุปพารามิเตอร์

parameterSummary อธิบายประโยคที่แสดงในตัวแก้ไขทางลัด โดยสอดแทรกพารามิเตอร์ลงในภาษาธรรมชาติ เช่น เพิ่ม \(taskTitle) ไปยังรายการของฉัน ทำให้การอ่านการกระทำของคุณชัดเจนเมื่อประกอบเป็นทางลัด

import AppIntents
struct AddTaskIntent: AppIntent {
    static var title: LocalizedStringResource = "Add Task"
    @Parameter(title: "Title") var taskTitle: String
    static var parameterSummary: some ParameterSummary {
        Summary("Add \(\.$taskTitle) to my list")
    }
    func perform() async throws -> some IntentResult {
        .result()
    }
}

เอนทิตี

AppEntity แทนอ็อบเจ็กต์แบบจำลองที่ระบบสามารถใช้เหตุผลได้ — งาน โน้ต หรือเพลย์ลิสต์ เมื่อมีเอนทิตีและคำค้น Siri และทางลัดจะให้ผู้ใช้เลือกข้อมูลของคุณเป็นค่าพารามิเตอร์ได้

import AppIntents
struct TaskEntity: AppEntity {
    static var typeDisplayRepresentation:
        TypeDisplayRepresentation = "Task"
    var id: String
    var displayRepresentation: DisplayRepresentation {
        DisplayRepresentation(title: "\(id)")
    }
    static var defaultQuery = TaskQuery()
}

คำค้นเอนทิตี

EntityQuery บอกระบบว่าจะค้นหาเอนทิตีของคุณด้วยรหัสอย่างไร และจะแสดงรายการคำแนะนำอย่างไร สิ่งนี้ทำให้เกิดตัวเลือกที่ผู้ใช้เห็นเมื่อเลือกค่าในทางลัดหรือตอบคำถามของ Siri

import AppIntents
struct TaskQuery: EntityQuery {
    func entities(for ids: [String]) async throws
        -> [TaskEntity] {
        ids.map { TaskEntity(id: $0) }
    }
    func suggestedEntities() async throws -> [TaskEntity] {
        [TaskEntity(id: "Groceries")]
    }
}

ทางลัดของแอป

AppShortcut ทำให้อินเทนต์เรียกใช้ด้วยเสียงได้โดยไม่ต้องตั้งค่า — ผู้ใช้ไม่จำเป็นต้องสร้างทางลัดก่อน คุณระบุวลีเรียกใช้ที่ต้องมีโทเค็นชื่อแอป เพื่อให้ Siri ทราบบริบท

import AppIntents
struct AddTaskShortcut: AppShortcutsProvider {
    static var appShortcuts: [AppShortcut] {
        AppShortcut(
            intent: AddTaskIntent(),
            phrases: ["Add a task in \(.applicationName)"],
            shortTitle: "Add Task",
            systemImageName: "plus")
    }
}

วลีเรียกใช้

วลีต้องมี \(.applicationName) เพื่อให้ Siri แยกความหมายได้ชัดเจน ระบุรูปแบบภาษาธรรมชาติหลายแบบที่ผู้ใช้อาจพูด ระบบจัดการการจับคู่ให้ ดังนั้นคุณไม่ต้องแยกวิเคราะห์ภาษาเอง

import AppIntents
// Provide variants; applicationName is required:
// phrases: [
//   "Add a task in \(.applicationName)",
//   "Create a task with \(.applicationName)",
//   "New \(.applicationName) task"
// ]
let phrases = "include applicationName token"
_ = phrases

แสดงการทำงานนอกเหนือจาก Siri

เนื่องจากอินเทนต์เป็นแบบเชิงประกาศ AddTaskIntent เดียวกันจึงใช้ขับเคลื่อนวิดเจ็ตแบบโต้ตอบ Button(intent:) ตัวควบคุมในศูนย์ควบคุม หรือการกระทำในทางลัดได้ — ทั้งหมดเรียกใช้ perform() ของคุณโดยไม่ต้องเขียนโค้ดเชื่อมต่อเพิ่มเติม

import AppIntents
import SwiftUI
// In an interactive widget:
// Button(intent: AddTaskIntent()) {
//     Label("Add", systemImage: "plus")
// }
let reuse = "one intent, many surfaces"
_ = reuse

การแปลอินเทนต์

ชื่อเรื่องและกล่องโต้ตอบใช้ LocalizedStringResource จึงแปลผ่านแค็ตตาล็อกสตริงของคุณได้ วลีเรียกใช้ก็แปลตามแต่ละภาษาเช่นกัน ทำให้ Siri ตอบสนองผู้ใช้ด้วยภาษาของตนเอง

import AppIntents
struct GreetIntent: AppIntent {
    static var title: LocalizedStringResource = "Greet"
    func perform() async throws
        -> some IntentResult & ProvidesDialog {
        .result(dialog: "Welcome back")
    }
}

ทบทวนสั้น ๆ

ลองทบทวนว่าอะไรทำให้วลีของ AppShortcut ใช้ได้

สรุปทบทวน

คุณได้เรียนรู้เรื่องอินเทนต์ของแอป:

  • ทำให้สอดคล้องกับ AppIntent โดยมี title และ perform() รับข้อมูลนำเข้าผ่าน @Parameter และอธิบายข้อมูลนั้นด้วย parameterSummary
  • จำลองข้อมูลเป็น AppEntity พร้อม EntityQuery สำหรับตัวเลือกและคำแนะนำ
  • เปิดให้ใช้การกระทำด้วยเสียงผ่านวลีของ AppShortcut ที่มี \(.applicationName)
  • อินเทนต์เดียวกันรองรับ Siri ทางลัด วิดเจ็ตแบบโต้ตอบ และตัวควบคุมต่าง ๆ พร้อมแปลภาษาได้ผ่าน LocalizedStringResource

คำถามที่พบบ่อย

บทเรียน “App Intents และทางลัด” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “App Intents และทางลัด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “App Intents และทางลัด”

เปิดให้ Siri และทางลัดเรียกใช้การทำงานได้ คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “App Intents และทางลัด” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้างวิดเจ็ตด้วย WidgetKit
  2. ผู้ให้บริการไทม์ไลน์และสแนปชอต
  3. ภาพรวมส่วนขยายแอป
  4. App Intents และทางลัด
← กลับไปที่ Swift Academy