mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-04-12 20:53:34 +08:00
fix(skills): address code review feedback on iOS 26 skill examples
- Add required name/description properties and @Generable to RecipeSearchTool - Fix missing argument label in session.respond(to:) call - Remove non-existent .scrollExtensionMode API, replace with correct guidance - Change PhotoProcessor from struct to class for cache mutation support - Fix method name mismatch in @concurrent example caller
This commit is contained in:
@@ -113,7 +113,11 @@ Let the model invoke custom code for domain-specific tasks:
|
|||||||
|
|
||||||
```swift
|
```swift
|
||||||
struct RecipeSearchTool: Tool {
|
struct RecipeSearchTool: Tool {
|
||||||
struct Arguments: Codable {
|
let name = "recipe_search"
|
||||||
|
let description = "Search for recipes matching a given term and return a list of results."
|
||||||
|
|
||||||
|
@Generable
|
||||||
|
struct Arguments {
|
||||||
var searchTerm: String
|
var searchTerm: String
|
||||||
var numberOfResults: Int
|
var numberOfResults: Int
|
||||||
}
|
}
|
||||||
@@ -139,7 +143,7 @@ let response = try await session.respond(to: "Find me some pasta recipes")
|
|||||||
|
|
||||||
```swift
|
```swift
|
||||||
do {
|
do {
|
||||||
let answer = try await session.respond("Find a recipe for tomato soup.")
|
let answer = try await session.respond(to: "Find a recipe for tomato soup.")
|
||||||
} catch let error as LanguageModelSession.ToolCallError {
|
} catch let error as LanguageModelSession.ToolCallError {
|
||||||
print(error.tool.name)
|
print(error.tool.name)
|
||||||
if case .databaseIsEmpty = error.underlyingError as? RecipeSearchToolError {
|
if case .databaseIsEmpty = error.underlyingError as? RecipeSearchToolError {
|
||||||
|
|||||||
@@ -124,13 +124,9 @@ Button("Toggle") {
|
|||||||
.buttonStyle(.glass)
|
.buttonStyle(.glass)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Scroll and Sidebar Extensions
|
### Extending Horizontal Scrolling Under Sidebar
|
||||||
|
|
||||||
```swift
|
To allow horizontal scroll content to extend under a sidebar or inspector, ensure the `ScrollView` content reaches the leading/trailing edges of the container. The system automatically handles the under-sidebar scrolling behavior when the layout extends to the edges — no additional modifier is needed.
|
||||||
// Extend horizontal scroll under sidebar
|
|
||||||
ScrollView(.horizontal) { /* content */ }
|
|
||||||
.scrollExtensionMode(.underSidebar)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Core Pattern — UIKit
|
## Core Pattern — UIKit
|
||||||
|
|
||||||
|
|||||||
@@ -137,8 +137,8 @@ This mode is opt-in and recommended for apps, scripts, and other executable targ
|
|||||||
When you need actual parallelism, explicitly offload with `@concurrent`:
|
When you need actual parallelism, explicitly offload with `@concurrent`:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
nonisolated struct PhotoProcessor {
|
nonisolated final class PhotoProcessor {
|
||||||
var cachedStickers: [String: Sticker]
|
private var cachedStickers: [String: Sticker] = [:]
|
||||||
|
|
||||||
func extractSticker(data: Data, with id: String) async -> Sticker {
|
func extractSticker(data: Data, with id: String) async -> Sticker {
|
||||||
if let sticker = cachedStickers[id] {
|
if let sticker = cachedStickers[id] {
|
||||||
@@ -156,7 +156,8 @@ nonisolated struct PhotoProcessor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Callers must await
|
// Callers must await
|
||||||
processedPhotos[item.id] = await PhotoProcessor().process(data: data)
|
let processor = PhotoProcessor()
|
||||||
|
processedPhotos[item.id] = await processor.extractSticker(data: data, with: item.id)
|
||||||
```
|
```
|
||||||
|
|
||||||
To use `@concurrent`:
|
To use `@concurrent`:
|
||||||
|
|||||||
Reference in New Issue
Block a user