# Swift trên Maguyva: đồ thị mã cho iOS và macOS

Canonical source: https://maguyva.ai/vi/languages/swift

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva hỗ trợ Swift với AST, ký hiệu và đồ thị, để agent AI có thể lần theo protocol, extension, initializer và observer trong mã iOS và macOS.

## Tổng quan hỗ trợ

- Cấp độ: Hỗ trợ AST và symbol
- Lập trình
- Phần mở rộng: .swift
- Phân tích AST thật cho tìm kiếm nhận biết cú pháp và context cấu trúc.
- Các symbol có tên cung cấp dữ liệu cho tra cứu ngữ nghĩa và tham chiếu chéo. Điều hướng graph khả dụng khi bật trích xuất quan hệ.
- Ngôn ngữ này đóng góp symbol và quan hệ cho tìm kiếm nhận biết graph; các loại edge được hỗ trợ thay đổi theo cấu trúc riêng của ngôn ngữ.
- Cả phân tích AST và trích xuất symbol đều khả dụng.

## Phù hợp nhất

- Các nhóm iOS và macOS có target ứng dụng lớn và package Swift dùng chung.
- Codebase xây quanh protocol và extension, nơi hành vi của một kiểu trải rộng trên nhiều tệp.
- Quy trình agent cần phân tích tác động trước khi thay đổi một model, service hoặc protocol dùng chung.

## Workflow agent

- Tìm mọi kiểu tuân thủ một protocol trước khi một yêu cầu của nó thay đổi.
- Lần theo nơi gọi một phương thức service qua các ViewModel, coordinator và package.
- Tìm initializer, thuộc tính tính toán và observer `didSet` chạm vào một trạng thái.

## Vì sao Swift cần nhiều hơn tìm kiếm tệp

Swift trải một kiểu ra nhiều nơi. Một struct được khai báo ở một tệp, nhận thêm hành vi từ extension ở ba tệp khác, và tuân thủ các protocol được định nghĩa trong một package. Thay đổi trạng thái ẩn trong thuộc tính tính toán và observer `willSet` / `didSet`. Một agent đọc từng tệp một sẽ bỏ lỡ phần lớn những điều đó.

Maguyva lập chỉ mục cấu trúc này, để agent thấy cùng lúc thành viên, sự tuân thủ và nơi gọi của một kiểu.

## Maguyva trích xuất gì từ Swift

Maguyva bao phủ `.swift`. Ký hiệu có thể gọi bao gồm hàm, `init` và `deinit`, subscript, getter và setter của thuộc tính tính toán, và observer `willSet` / `didSet`, để mã thay đổi trạng thái có thể được tìm như ký hiệu thay vì bị lẫn trong thân thuộc tính.

Thành viên khai báo trong struct, enum, protocol và extension được định danh theo kiểu sở hữu (ví dụ `CartStore.add`), và thành viên được thêm trong extension được gán cho kiểu được mở rộng. Tham số generic, danh sách tuân thủ protocol và hậu tố `?` / `!` được bỏ khỏi tên định nghĩa, nên tìm kiếm dùng tên trần. Lời gọi giữ `self.` và định danh lớp, và trailing closure được tính vào số đối số của lời gọi.

Đồ thị ghi lại lời gọi, tuân thủ protocol, kế thừa, ghi đè, khởi tạo, attribute, tham chiếu kiểu, đọc và ghi, cùng các cạnh `throw`.

## Ví dụ prompt cho agent

- "Những kiểu nào tuân thủ `PaymentProvider`, và mỗi kiểu được tạo ở đâu?" (`dependency_search`)
- "Ai gọi `CartStore.add`, và từ những view nào?" (`find_symbol`, sau đó `dependency_search` theo chiều vào)
- "Giải thích cách một thông báo đẩy tới được màn hình hộp thư." (`get_task_context`)

## Giới hạn đã biết

- Chỉ mã nguồn `.swift` được ánh xạ. Tệp Storyboard và XIB không có trong danh sách phần mở rộng, nên các kết nối Interface Builder nằm ngoài đồ thị.
- Các lời gọi thư viện chuẩn và Foundation như `print`, `debugPrint`, `NSLog` và assertion bị lọc khỏi quan hệ, nên chúng không phải là cạnh đồ thị. Dùng `text_pattern_search` cho chúng.

## Bước tiếp theo

Kết nối một kho mã bằng [hướng dẫn bắt đầu nhanh](/vi/docs/quickstart), sau đó xem ma trận hỗ trợ trên [trang tương thích](/vi/docs/compatibility). Nếu bạn phát hành cùng sản phẩm trên Android, hãy đọc [hướng dẫn Kotlin](/vi/languages/kotlin).

## Chi tiết engine

- Ký hiệu có thể gọi bao gồm hàm, `init`, `deinit`, subscript, getter và setter của thuộc tính tính toán, và observer `willSet` / `didSet`.
- Thành viên của struct, enum, protocol và extension được định danh theo kiểu sở hữu, như `CartStore.add`.
- Tham số generic, danh sách tuân thủ protocol và hậu tố `?` / `!` được bỏ khỏi tên định nghĩa, còn lời gọi giữ `self.` và định danh lớp.

## Điểm khởi đầu MCP hữu ích

- `find_symbol`: Dùng với tên kiểu, protocol hoặc phương thức khi bạn cần định nghĩa và các tham chiếu.
- `dependency_search`: Dùng trên một protocol để tìm các kiểu tuân thủ, hoặc theo chiều vào trên một phương thức để tìm nơi gọi.
- `get_task_context`: Dùng cho các prompt như “giải thích cách một thông báo đẩy tới được màn hình hộp thư”.
