WWDC Quick Look 💓 By SwiftGGTeam
Prototype with Xcode Playgrounds

Prototype with Xcode Playgrounds

元の動画を見る

ハイライト

Xcode 15 のプレイグラウンドは、自動実行、インライン結果表示、カスタム型の説明をサポートしています。開発者はプロジェクトを再構築することなく、新しい機能のプロトタイプを迅速に作成できるため、反復時間を数分から数秒に短縮できます。

主要内容

機能的なアイデアはありますが、それを変更するたびに、効果を確認するために再コンパイルし、アプリを起動し、対応するページに移動する必要があります。このサイクルには数分かかる場合があり、インスピレーションはとうに消えてしまいます。

Xcode Playground はこのサイクルを断ち切ることができます。これをプロジェクトに追加し、プロジェクト内の型を直接呼び出して、コードを変更した後数秒で結果を確認します。

(02:34) 講演者は野生生物の写真撮影アプリを開発しており、チェックリストにフィルタリング機能を追加したいと考えています。リストには 2,000 種を超える鳥が含まれていますが、そのすべてが満足のいくものではないようです。彼はそこにいる必要があるbirdsToShow計算されたプロパティにフィルタリング ロジックを追加します。

プロジェクト内に新しいプレイグラウンドを直接作成し ([ファイル] > [新規] > [プレイグラウンド])、[空白]を選択します。プロジェクトのプレイグラウンドには、デフォルトで 2 つの設定が有効になっています。

  • アクティブ スキームの構築: 各実行前にアクティブなスキームを自動的に構築します。
  • アプリ タイプのインポート: アプリ ターゲット モジュールを自動的にインポートします。

これは、プレイグラウンドがプロジェクトで定義されたアイテムを直接使用できることを意味します。BirdProviderBirdおよびその他のタイプの場合、手動インポートは必要ありません。

(03:15) 実行モードを「自動実行」に切り替えると、入力を停止した後にプレイグラウンドが自動的に実行されます。これで実験を開始できます。

インライン結果と型探索

(04:05)BirdProvider例:

let birdProvider = BirdProvider(region: .northAmerica)

Xcode 15 の右側の結果バーには、このコード行の出力が表示されます。インライン結果の切り替えボタンをクリックすると、詳細な構造が表示されます。 -birds配列 -region列挙値

各行には型情報ラベルもあり、ツールチップにはその型のソース モジュールが表示されます。配列を展開すると、Xcode 15 は結果を生成するソース コードを強調表示して対応を容易にします。

(05:45) デフォルトでは、カスタム タイプBird配列要素にはインデックス番号のみが表示されます。させてBirdフォローするCustomStringConvertible

extension Bird: CustomStringConvertible {
    public var description: String {
        return "\(commonName) (\(scientificName))"
    }
}

キーポイント:

  • description一般名と学名の組み合わせを返します。
  • この拡張子は定義に追加されますBirdソース ファイルでは、デバッガは次の利点も得られます。
  • フォローすると、プレイグラウンドの結果バーに鳥の名前が直接表示されるため、展開する必要はありません

(07:53) 行をクリックしたときに鳥の写真を表示したい場合は、次を使用しますCustomPlaygroundDisplayConvertible

extension Bird: CustomPlaygroundDisplayConvertible {
    public var playgroundDescription: Any {
        return photo as Any
    }
}

キーポイント:

  • playgroundDescription遊び場環境でのみ効果があります
  • 明示的な変換Anyオプション情報の損失に関するコンパイラ警告を回避する
  • 戻るnil、プレイグラウンドはデフォルトの表示に戻ります。
  • Xcode 15 は分割画面ビューを使用してオブジェクト構造とプレビューを同時に表示します

フィルタリングと検証 UI

(09:35) まず、まだ写真を持っていない鳥を除外します。

let birdsToFind = birdProvider.birds.filter { $0.photo == nil }

残り1,800個以上あることが判明した。次に、カテゴリーでフィルターしてフクロウのみを表示します。

let owlsToFind = birdsToFind.filter { $0.family == .owls }

残りは 5 つだけなので、範囲は妥当です。

(11:15) カスタマイズの確認ChecklistView

let checklist = ChecklistView()
for bird in owlsToFind {
    checklist.add(bird)
}

Xcode 15 の値履歴モードは、分割画面ビューを使用して、各ループ反復後の UI 状態を表示します。話者は、鳥が 1 羽しかいない場合でも、ヘッダーには複数の「鳥」が表示されていることに気づきました。

(12:16) 文字列カタログ内のこの単語に複数形の変形 (Vary By Plural) を追加し、単数形を「bird」に変更します。プレイグラウンドに戻ると、ヘッダーには単数形と複数形が正しく表示されます。

外部依存関係を統合する

(14:27) 講演者は統合を希望していますBirdSightings最近の野鳥観察記録を取得するためのパッケージ。このパッケージには、API の使用法を示すドキュメント Playground が付属しています。

let barnOwlCode = "BNOW"
let centralParkLocation = CLLocationCoordinate2D(latitude: 40.785091, longitude: -73.968285)

let sightingsProvider = SightingsProvider()
sightingsProvider.fetchSightings(of: barnOwlCode, around: centralParkLocation)

自分の遊び場で試してみてください。

import CoreLocation
import BirdSightings

let bird = owlsToFind.first!
let appleParkLocation = CLLocationCoordinate2D(latitude: 37.3348655, longitude: -122.0089409)

let sightingsProvider = SightingsProvider()
let sightings = sightingsProvider.fetchSightings(of: bird.speciesCode, around: appleParkLocation)

let mostRecentSighting = sightings.first
let sightingMapView = SightingMapView(sighting: mostRecentSighting)

(18:55) ライブビューを使用してマップ効果を表示します。

import PlaygroundSupport
PlaygroundPage.current.liveView = sightingMapView

地図の位置が間違っていることがわかりました。 Xcode 15で改善されましたCLLocationCoordinate2Dプレビューで座標を確認したところ、経度に負の符号が欠けていることがわかりました。 Apple Parkの付近が正しく表示されるように地図を修正しました。

(22:20) 検証されたコードをプロジェクトに戻します。

func sightingToShow(for bird: Bird) -> Sighting? {
    let sightingsProvider = SightingsProvider()
    let sightings = sightingsProvider.fetchSightings(of: bird.speciesCode, around: lastCurrentLocation)
    let mostRecentSighting = sightings.first
    return mostRecentSighting
}

詳細

プレイグラウンド実行モード

Xcode 15 は 2 つの実行モードを提供します。

  • 自動実行: 入力を停止すると自動的に実行され、簡単な実験に適しています。
  • 手動実行: 実行タイミングを手動で制御します。ネットワーク リクエストなどの時間のかかる操作を伴う状況に適しています。

切り替え方法:下部の実行ボタンを長押しし、メニューから選択します。

複数式行の新しいコントロール

(09:48) Xcode 15 では、1 行に複数の式がある場合、新しいサイドバー コメントが表示されます。コントロールをクリックすると、各式の個々の結果が表示されます。インライン結果トグル ボタンの上にマウスを置くと、対応するソース コード範囲が強調表示されます。

プレイグラウンドからプロジェクトへのコードの移行

プレイグラウンドで検証されたコードは、プロジェクトに直接コピーできます。次の点に注意する必要があります。

  • プレイグラウンドで利用可能!強制解凍、プロジェクト コードには適切なエラー処理が必要
  • ネットワーク リクエストはプレイグラウンドで手動で実行され、プロジェクトでは非同期状態と読み込み状態を考慮する必要があります
  • プレイグラウンドの Sources ディレクトリ内の拡張機能は、プレイグラウンド内でのみ有効になります。

重要ポイント

  • やるべきこと: 特に新しいアルゴリズムと API を実験するために、「スクラッチ」プレイグラウンドをプロジェクトに追加します。

  • 実行する価値がある理由: プロジェクトを再構築したり、一時的なテスト コードを作成したりする必要がなく、数秒で結果を確認できます。アイデア検証のコストがゼロに近づく

  • 開始方法: [ファイル] > [新規] > [プレイグラウンド]、[空白]を選択し、[アクティブなスキームの構築] と [アプリの種類のインポート] がチェックされていることを確認します。

  • 内容: プロジェクトのコア モデル タイプに実装されます。CustomStringConvertible- 実行する価値がある理由: プレイグラウンドの結果バー、デバッガー、および印刷はすべて意味のある説明を表示し、デバッグ効率が大幅に向上します。

  • 開始方法: 最もよく使用される 3 ~ 5 つのモデル タイプを追加しますdescriptionプロパティ。ビジネスに意味のある文字列を返します。

  • やるべきこと: Playground を使用してサードパーティ パッケージの API を検証し、それをプロジェクトに統合します。

  • 実行する価値がある理由: パッケージのドキュメント プレイグラウンドまたは独自の実験コードを使用すると、API の入力と出力をすぐに理解できるため、プロジェクト内でコンパイルとデバッグを繰り返す必要がなくなります。

  • 開始方法: パッケージを Playground にインポートし、実際のパラメーターを使用してキー API を呼び出し、戻り値の構造と内容を確認します。

  • 内容: 複雑なカスタム UI コンポーネントをライブビューでプレビュー

  • 実行する価値がある理由: MapView や Chart などの複雑なコンポーネントをシミュレーターで表示するにはコストがかかります。ライブビューはフルサイズのインタラクティブなプレビューを提供します

  • 開始方法: UI コンポーネント インスタンスの作成、セットアップPlaygroundPage.current.liveView、エディター オプションでライブ ビューを開きます

関連セッション

コメント

GitHub Issues · utterances