ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Swift Playgrounds 3
Swift Playgrounds 3は、Swiftでのコーディングをインタラクティブで楽しいものにする、革新的なiPad用Appの最新バージョンです。このセッションでは、独自のプレイグラウンドを使用して、デバイスの機能を使用するコードをすばやく反復処理する方法について説明します。新しいモジュールの機能が、独自のコードを整理したり、Playgroundブック作成の新たな可能性を開いたりする上でどのように役立つかについてご確認ください。
リソース
-
ダウンロード
(音楽)
(拍手と歓声) Swift Playgrounds 3にようこそ 私はグレース・ケンダル ジョイ・フォーブス ジョナサン・ペンです Swift Playgroundsエンジニアの 私たちが新機能を説明します Swiftを使ってiPadで 開発ができるのです より良いプレイグラウンドを 作るための技術も実演します Swift Playgroundsは Swiftコードを書いたり 他人が作ったコンテンツから 学んだりできるアプリケーションです 本物のSwiftコードを書いて iPad上でコンパイルし 実行できます
作成あるいは入手した プレイグラウンドは ドキュメントのリストに表示されます 画面下のセクションには 既得のものに類似した プレイグラウンドが表示されます “すべてを見る”を押すと Appleから入手可能なコンテンツと 登録済みのフィードが― すべて表示されます 他のパブリッシャセクションで 注目のサブスクリプションを ブラウズできます
Swift Playgrounds 3では 6つのコンテンツが加わりました 「コードを学ぼう」に 「Lights, Camera, Code」 「Assemble Your Camera」 「Flashy Photos」が加わりました これらと「Camera Create」によって コンポーネントで カメラや写真エディタを ビルドできます 「Sonic Workshop」と 「Sonic Create」は iPadのタッチイベントを使って作曲し 視覚的なサウンドスケープを作ります
今日はSwift Playgrounds 3の 新機能をご紹介します 私はiPadでできる 幅広い開発を紹介 ジョイはMacで入手可能な 新機能について説明します まずはジョナサンが― Swift Playgrounds 3の魅力を ご説明します ジョナサン ありがとう (拍手と歓声) Swift Playgrounds 3は アイデアのスクラッチパッドとして とても有力なツールです 個人的にはAccelerometerのような センサーに期待します Accelerometerを使うと ゲームの画面に表示されるものに 動きを与えることができます 無限の マーブル障害物レースゲームを― どのように作ったか見てみましょう iPadのSwift Playgroundsで ゼロから作りました マーブルを穴に落とさないようにする パズルゲームです このゲームでは マーブルをiPadの動きに 反応させることが重要です 自動的に生成される穴を 避けながら進みます 穴に落ちたり脱線したりせず― 早く遠くまで進むのが このゲームのゴールです
開発プロセスの 幾つかを見てみましょう もちろん Swift Playgroundsを使います Accelerometerの生データを読んで インライン結果で実験 ライブビューで物理エンジンと SpriteKitゲームについて学びます コース全般にわたる 自動的な穴の生成を実験し 最後にプロトタイプをお見せします 始めましょう
白紙のページから始めます Swift Playgroundsドキュメントの ページは実行のエントリポイントです main.swiftファイルです 私は旅行記のように 異なるページを使ってます 問題の解決や 新たなAPIの学習などを行います 1つのサブシステムで始めるか 関数を使うかして 新しいページに移動します そこで次のアイデアに取り組み さらなる実験の際に戻れるように 残しておきます 主な仕組みは iPadを傾ける動きなので Core Motionの インポートから始めます CMMotionManagerを作ります ハードウェアのキーボードの Tabキーを使い 下のショートカットバーから コード補完の選択肢を選びます returnキーを押して選択します startAccelerometerUpdatesを 記述してスタートを指示します 私はAccelerometerの XYZ座標が― iPadの どの動きに対応するか いつも混乱します ここで明確にしましょう 始まるまで少し待ちます Accelerometerの起動には 時間がかかります 定期的に読み込む方法は 後で考えましょう 今は実験を進めて ここから値を出します Accelerometerのデータが欲しいと マネージャーに伝えます accelerationプロパティと X座標もです 独立した行に記述すると それが記録され インライン結果が 右端に表示されます コードをタップすると見られます 4行のインライン結果です 最終行の最後のアイコンを タップします 値が出ました マイナス0.78です 何か意味があるはずです iPadを傾けて再度やると 値はどうなるでしょう マイナス0.061です 数字が変わりました iPadの動きに関連する 反応のようです 現状を知らせてくれるリアルタイムの フィードバックがあるといいですね 次のページに例を用意したので 進みましょう
プレイグラウンドのページを実行し プログラムカウンタが終わると 実行が止まります コードをタップすれば 再スタートできます 多くの場面で有用ですが 今回は 値を集計できるように実行を続けます Playground Support APIを使って 現在のページに 無限の実行を命じます CMMotionManagerを作り Accelerometerの起動を命じます 後続のクロージャを受け取る repeatEveryという ヘルパー関数を書きました このクロージャを呼び出し 一定時間後に再度呼び出します これにはDispatchQueueの asyncAfterメソッドを使います 荒削りな繰り返しですが 今は実験ですし問題ありません 必要な時に このページで再利用できます ここで使います 半秒ごとにクロージャが 呼び出されます accelerometerDataが nilでなくなると― この行の式を使って X座標を記録します コードをタップすると どうなるでしょう 画面上で何かが起きています インライン結果を 見てみましょう 自動的にグラフ表示が選ばれ― 一連のシンプルな数値が 表示されています iPadを動かしてみます 変化が起きました いいですね 基準値を得るために 水平に持ちます 前に傾けると こうなります 逆だと こうです これで分かったでしょう AccelerometerのX座標は― iPadのこの方向の動きに 対応しています よく分かりました Y座標とZ座標も 同様に検証できます 有益ですね repeatEvery関数は… (拍手) ありがとう (拍手) repeatEvery関数は 荒削りですがシンプルです より良い方法が見つかるまで 他でも使います Swift Playgrounds 3で白紙の プレイグラウンドとして作成したので 新しいタブ付きの編集機能が使えます お見せします ナビゲーションバーの ファイルアイコンにある― ユーティリティモジュールをタップ するとユーザモジュールと ソースファイルピッカーが現れます すでにいろいろ作業してます ユーティリティモジュールに 例の関数を追加し Timing.swiftファイルを作成します タブをタップして ページのメインファイルに戻ります repeatEvery関数をタップし 選択します 長押しするとつかめます 反対の手でTimingタブをタップし コードをコピーとして ファイルにドロップします 新しいファイルなので― Foundationをインポートし 時間間隔やディスパッチキューを指定 シンボルの処理を指示します 他のページやモジュールでも この関数を使えるように パブリックとマークします メインファイルに戻り 関数を選択して削除します うまく動くはずです どうでしょう やった 必要なだけファイルを開いて 新しいアイデアを試せます Math.swiftを試しましょう 実験用に いろんなものを投入しました コードがスムーズに書けるよう 数学のヘルパー関数やシステムの Extensionなどを使用しました プロセスの一部です タップとドラッグでタブを整理 閉じるボタンで閉じられます ドキュメントのどこでも このコードが使えます 便利ですね もう少し先に進みましょう 記憶を呼び起こすため SpriteKitを触ってみました どこまで進んだか 次のページで見てみましょう SpriteKitのドキュメンテーションを 呼び出します ナビゲーションバーの ツールメニューから― ドキュメンテーションを選択 虫眼鏡をタップし SpriteKitを検索 これを読んで 記憶がよみがえりました 書いたコードが 画面の左端にあります SpriteKitのシーンとノードを 学びました ゲームのレイアウトと 画面のレンダリングに使われます 物理エンジンや― 物理機構が作動するよう ノードに力を加える方法を学びました ゲームループについてもです SpriteKitがフレームごとに コードを呼び出すたび― 環境に影響が及びます 最後の点は重要です サイドパネルを閉じて 実行コントロールのメニューを開きます SpriteKitに呼び出されたら 素早く動く必要があるので インライン結果を消します 多くの場合で 役に立ちますが― 表示の記録には 時間がかかります SpriteKitを減速させたくないので ここでは不要です コードをタップすると SpriteKitがライブビューになります SpriteKit自体が 必要なフィードバックをくれます これです 丸い形のものが iPadの傾きに応じて動き回ります これが大事なところです (拍手) ありがとう (拍手) 画面で動く 物理的なものができたら― ユーザによる検証が必要です 子供たちに “面白いものを見せる”と言うと― iPadをのぞき込みました 傾けると丸が動き回るのを 面白がり― “悪くないね”と言いました (笑い声) でも何か足りません マーブルの数が不十分です もっと大量のマーブルが必要です 将来の製品管理者の意見です (笑い声) 本来のゴールとは無関係ですが マーブルを足せば面白そうです そこでタップジェスチャ認識を 追加しました 画面をタップするたびに 新たなSpriteKitノードが シーンに挿入されます それを物理エンジンに追加すると 面白い動きになります これが結果です 子供の年齢が低いほど必死に 画面を叩きますがクラッシュしません すると大きく揺さぶりました 正直なところ 最高に面白いですね こうやって… (効果音) 続きは後にします (笑い声と拍手) 皆さんも気分転換にどうぞ iPadを傾けると SpriteKitが Accelerometerに反応します ゴールが見えてきましたね 楽しみです 残る課題は 自動的な穴の生成です マーブルが回避すべき 穴が開いていると思ってください 穴の位置を記憶させておけば ユーザが逆方向にスクロールしても すでに見た穴が現れます 先に進んで実験を見てみます このページを作りながら ゲームモジュールに入り
map構造体を作りました 移動に合わせて 穴の位置を計算して― 記憶するのが目的です マップを列のグリッドに分解し そこに穴を配置します シンプルです もっと複雑なものにできますが 今は必要ありません ゲームエンジンモジュールで Mapノードを作成しました これがマップを受け取り 場面に合わせて― ノードをレイアウトします そしてrectangleに渡します これはカメラと ビューポートの位置を示します するとノードを再利用しながら 穴をレンダリングします UITableViewのように機能します コードを実行してみましょう 右端のインライン結果を タップしてプレビューします SKViewを生成したいので プレビューメソッドは Mathノードで 自分で書きました SpriteKitシーンを表示する UIViewのサブクラスです 生成すると静的な インライン結果として現れます これ以上の追加作業は不要でした 準備完了です 穴の直径は20ポイントです これが この時点での マップの密度です 値を調整したり 別のファイルで調整したり― いろいろと実験できます インライン結果が 必要なフィードバックをくれます
準備完了です 最終段階までスキップして 完成したゲームを見ましょう 始める前に インライン結果を消します いろんな作業をしています 表示の記録は不要ですし 減速したくありません コードをタップして… この通り マーブルのようなものが 壁のようなものの上にあります いいでしょう 作業中 ジョイに言われて 思い出しました ダウンロードできるテンプレートから テクスチャが選べます リソースを活用できます センサーのテンプレートと アセットピッカーを使い テクスチャを選んで アプリケーションにドロップしました さらに画像編集のアプリケーションで ぼんやりした穴を作りました この通りです 放射状グラデーションは すごいですね 真ん中をタップし左にドラッグすると フルスクリーンになります もう一度やってみます ゲームが再開できるよう タップ認識も追加しました どこまで行けるでしょう スピードとスコアと比例させて ちょっとした無謀さも 楽しめるようにしました おっと
人前では難しいですね (笑い声) お見せしたように ここまでの作業は すべて このiPad上で行いました 面白かった 私の家族も楽しみました SpriteKitや新しいユーザモジュール ソースファイルのサポートを 細かく見ていきました すばらしい経験でした Swift Playgroundsはアイデアを試す すばらしいスクラッチパッドです APIを試してみるのもいいでしょう スピードゲームで ストレスを増やすのもアリです グレースを呼び戻しましょう 使い方の説明をしてくれます Swift Playgrounds 3を 使いこなすコツが分かるでしょう ありがとう (拍手と歓声) ありがとう
Swift Playgroundsになじみがあれば 新たな点に気づいたでしょう それらを説明します
まずはモジュールの追加です コードを複数のSwiftファイルに 分割できます
モジュールはSwiftコードの ディレクトリとして どのページでも使えます ターゲットの設定や 新しいビルド設定は不要です
モジュールをブックに― Swiftファイルをモジュールに 追加できます ただしドキュメントをリセットすると ユーザの編集もリセットされます 追加したファイルや モジュールも同じです
これらの新しいファイルで プレイグラウンドの構造を見てみます Shapesテンプレートを例に使います
それぞれのブックに ページがあり― 複数のモジュールがあります
それぞれのモジュールには 複数のソースファイルがあります
異なるSwiftファイル間の アクセスレベルについて説明します
コードは ブックの 別のページと共有されません つまり Canvasページのコードは Createページと共有されません しかし モジュールは自動的に 各ページにインポートされます コードがパブリックであれば どのページからもアクセスできます
同じモジュールのファイルは パブリックでなくてもアクセスできます しかしコードが プライベートになってるなら 他のモジュールや ページでは見えません
デフォルトでは コードはモジュール間で共有されません Graphicsモジュールのコードを Mathモジュールにある Calculus.swiftで参照したい場合 Graphicsのコードを パブリックとマークし Calculus.swiftファイルに Graphicsモジュールをインポートします
モジュールでも インライン結果にアクセスできるので ファイル間でのコードの動きを 監視できます コードが実行されるファイルは 自動的に切り替わります
インライン結果をオフにして 実行を加速することもできます コントロールは 実行制御メニューにあります Step Through My Codeや Step Slowlyもあります
Issuesポップオーバーは ファイル全体のエラーを表示し ナビゲートを手助けします
エラーをタップすると 対応する行へ ビルドとランタイム 両方のエラーです
Swift PlaygroundsはSwift 5と iOS 12.2 SDKをサポートします Core ML 2やARKit 2などの フレームワークを使って iOS上でiOS向けの開発ができます
白紙のプレイグラウンドに コンテンツテーブルの ポップオーバーを通してページを追加 モジュールを追加し― Swiftソースファイルも追加します すべてアプリケーション内でできます
モジュールモードの設定や コードコメントのローカライズなど コンテンツのカスタマイズ方法は 様々です ドキュメントを開いた時に 見えるファイルも変えられます 次はジョイが その方法を説明します (拍手と歓声) ありがとう
プレイグラウンドを直接 もしくは サブスクリプションで共有する場合 Xcodeでカスタマイズできる 新機能があります
学習者に与えるツールは レベルが適切で― ユーザが使いやすいものであるべきです オーディエンスに ふさわしいツールを作るために Swift Playgrounds 3の機能を 活用しましょう プレイグラウンドの重要な部分を強調し 複雑さを取り除きます 新機能により より良いコンテンツが作れます 学習者にとっては本物の 開発ツールを使う良い経験になります
まずモジュールモードです これについては ジョナサンとグレースも話しました 制作者は自分のブックに適した モジュールモードを選べます モジュールは新しい機能で すべてのブックに有効とは限りません 3つのモジュールモードがあります NoneとLimitedとFullです モジュールモードによって ブックの基本的性質が変わります ユーザエクスペリエンスの 基盤になるでしょう Noneから始めましょう
これは従来通りの プレイグラウンドが体験できます ユーザモジュールには アクセスできません ストーリーとコードの前進は ページとチャプターに依存します 各ページは独立して動きます ページ間でユーザコードは 共有されません
ブックのコードはすべて モジュールフォルダへ これはプライベートモジュールです プレイグラウンドのブックで 参照できますが 学習者は編集できません プライベートモジュールは どのモードでも使えますが Noneモードでは すべて プライベートモジュールに入ります
ページとチャプターは 順番通りに読み取られます ページごとにゴールを考えましょう 新しいことをできるようにしたり ライブビューなどを取り入れましょう 学習者にフィードバックを与え 課題の修了と次に進む準備ができたと 確信させましょう
このモジュールモードのブックの ライブラリです 「コードを学ぼう」や 「Lights, Camera, Code」 様々な挑戦もあります
Limitedモードでユーザモジュールと 共有ファイルを見ていきましょう ユーザモジュールが1つ使えます プライベートモジュールと異なり 学習者が編集できます
ユーザモジュールの共有ファイルは ブック内に残り コードを構成します アクセスできるモジュールは1つで 複数のファイルの管理が学べます 開いていないファイルからも バグが入り込みます
1つのモジュール内で 好きなだけ共有ファイルを提供できます 学習者は共有ファイルの 編集 作成 削除ができます
プライベートモジュールを使い― 学習者が編集できないAPIを 含めることもできます
ジョナサンの実演では 1つのMath.swiftファイルに 複数のMath関数を含めていました 共有ファイルの追加は 最高の学習機会です コードを論理的に 整理する方法が学べます 複数のページで作ったコードを 共有ファイルに移動したり― 頻繁に変えるコードを 除外したりします Limitedモードのブックの ライブラリの一例です 「Blu's Adventure」や 「Assemble Your Camera」 「Flashy Photos」や 多様な挑戦もあります
すべてを使いたければ Fullモードがあります すべてのツールが使えます 複数のモジュールや その中に新しいファイルを作れます
コードのアーキテクチャと構成を 教えるのに最適です ファイルだけでなく 複数のモジュールの管理も教えられます 必要ならモジュールを 相互にインポートできます
Fullモードでは プライベートモジュールも使えます すでに構築された ユーザモジュールもです ユーザモジュールは 学習者たちも拡張できます 自分のものにできるのです モジュールをオーサリングする場合 プライベートかユーザモジュール どちらにするか考えましょう コードをユーザモジュールに入れれば 学習者はプレイグラウンドで 遊びながら構造が学べます 自分たちで手を加えることもできます 学習者は学習者の域を超え― アプリケーション開発者のようなことが できます
Fullモードのライブラリです スタートポイントをご覧ください ブックをどのモードにするかは― ブックレベルのマニフェストにある UserModuleModeキーで編集します
モジュールをLimitedか Fullモードで使う場合 ファイルの自動オープンと起動を ページごとにカスタマイズできます
タブ付きのエディタでは 複数のファイルを表示できます ページを訪問した時に開いたり 起動するファイルを指定できます
ファイルを開くとmain.swiftファイルが アクティブになりますが エディタでは タブとして 他のファイルが開くかもしれません ページを訪問したユーザに 共有ファイルを提供することで どのファイルを編集し 参照するかを見極められます ファイルのポップオーバーで 探す必要がなくなります
マニフェストでページごとに どのファイルを開くかを指定できます
マニフェストで― UserModuleSourceFilesToOpenを 使います そして共有ファイルを 記述します 各アイテムの値は 共有ファイルの相対パスです
ファイルを開く場合 デフォルトのアクションとしては main.swiftが アクティブなファイルになります 最初 または最も頻繁に作業するのが 共有ファイルなら ページを訪問する際 そのファイルをアクティブにしましょう
共有ファイルをアクティブにするには UserModuleSourceFileToActivateを 使います ページレベルのマニフェストにあります このキーの値は 1つの共有ファイルへのパスです
コード補完は メインファイルでできましたが Swift Playgrounds 3では 共有ファイルにも拡張されます
コード補完ディレクティブが ショートカットバーで示すAPIを決定 ショートカットバーは学習者を導き タイプする時間を最小限にし― 次の工程を知らせます 初心者向けでは 学習者が コードをタップできるようにして ハードルを下げます 上級者向けのコンテンツでは 適時にAPIを示します 制作者はショートカットバーの表示を ページごとに制御できます メインファイルでも 共有ファイルでもです
Swift Playgroundsでは コード補完ディレクティブを 提供する方法が2つあります main.swiftファイルから見ていきます
「Assemble Your Camera」で コード補完ディレクティブが なければ最初はこうです ショートカットバーの表示を 制御するために ディレクティブの everything, hideから始めます ショートカットバーに何も表示されず 白紙になります
提案を表示するには currentmodule, showを使います このキーワードを使うと メインファイルで作成するものが すべて表示されます
module, showのディレクティブは ユーザモジュールで パブリックとされたものが表示されます ユーザがプレイグラウンドで 書いたコードもです UIKitなどのライブラリを 示すのに使うディレクティブと同じです ディレクティブについては Swift Playgroundsの ドキュメンテーションをご覧ください
Swift Playgrounds 3で 追加されたのが ページレベルのマニフェストで コード補完ディレクティブを 共有ファイルに追加する方法です 学習者がブックを探索する時に メインファイルで示すAPIを 共有ファイルでも調整できます 初心者に過度な負荷をかけません
それにはUserModule CodeCompletionDirectivesを使います メインファイルと同様に コード補完ディレクティブを記述
everything, hideを使うなら currentmodule, showと module, showも使います メインファイルと共有ファイルで 作成されたすべてを表示します publicやprivateなどのキーワードを 識別子として追加し 学習者が新しい関数などを始める時 ファイルを見せることもできます
次はSwiftでの カットシーンの作成です
Swift Playgroundsのブックでは 新しいスキルの紹介や ユーザを引きつけるため カットシーンが使えます HTMLでしかできなかったことが Swiftでもできるようになります
(拍手と歓声) デベロッパに 多大な利益をもたらします SpriteKitやUIKitなどの フレームワークを活用できます Swiftを使えばツールを変えずに カットシーンを作成できます StoryboardやAuto Layoutで Interface Builderが使えます コンテンツと同じツールで カットシーンもローカライズできます
Swiftを使えば カットシーンをブックに追加できます cutscenepageで終わる フォルダがあり swiftファイルと マニフェストの両方が必要になります swiftファイルは liveView.swiftファイルのような挙動で ライブビューを提示します
コンテンツ一覧に カットシーンを表示するため チャプターレベルのマニフェストに 追加します 新しいページと同じです
最後に紹介するのが ローカライズされたコードコメントです
複数のロケールで プレイグラウンドブックを配布する際に コードコメントと文字列を ローカライズできます つまり学習者用のブックを ローカライズできるのです
(拍手) 複数行のコメントを localizable-zoneに書けます 各localizable-zoneは 固有の識別子を持ちます インラインのlocalizable-zoneでは 文字列リテラルをローカライズできます ローカライズされた コードコメントは― LocalizableCode.stringsファイルに 保存されます
Swift Playgrounds 3の新機能でした 次はグレースによる 新機能の実演です (拍手) 新機能を使えば― iPadでSwift Playgrounds用に 面白いものが作れます iOSのカメラを組み込んだiPadの アプリケーションを作成するには MacのXcodeで 白紙のアプリケーションから始めます コードを書き iPad上で動かし 2つのデバイスの間で 往復します でもSwift Playgroundsを使えば iPad上でコードを書けます カメラを使用する Visionフレームワークと 物体検出とライブキャプチャを行う Core MLを使います このApp開発に Swift Playgroundsは最適でした
アメリカ手話には ネームサインがあります これは人物を特定する手話です 私のサインは グレースのGと笑顔の組み合わせです 左の仏頂面が私です こんな感じのサインが似合う これに着想を得て作った コンテンツが 落書きと手話認識を 組み合わせたものです
これがコンテンツです 「Sign Me Up!」というブックに パッケージ化されています ジョナサンとジョイと私が 独自のフェイスペイントを作り それを手話で起動します ライブビデオ上で描けるように タッチ認識を加えました Visionフレームワークを使って ドローイングを追跡し顔を検知します Core MLを使って 物体認識とライブキャプチャを行い サインに応じて ドローイングを表示します
ブックを作成し Limitedモードで 一部 実装の詳細を隠しました ユーザにはSwiftファイルに 集中してほしいからです
MacでCore MLモデルを訓練し サインを認識させました GとYとNです そのモデルをiPadのプレイグラウンドに インポートしました Gはグレースです ジョナサンとジョイは 名前の最初の2文字が同じなので 3番目の文字にしました Yがジョイで Nがジョナサンです ここで2人を呼び戻しましょう
(拍手)
最初のページに ユーザへの指示を追加しました ソースエディタをタップすると コード補完ディレクティブが setColors関数を提示します 色リテラルプレースホルダを選択して タップすれば関数が埋まります Quick editorでUIの 色を見やすくしています setColors関数で 使える色を設定します やってみましょう
ライブビューを フルスクリーンにしましょう 左下の文字をYに設定します 右下の丸をタップして 色を選択します フェイスペイントができます
Visionフレームワークを使って 顔を追跡します Visionは顔と主要部分の バウンディングボックスを返します 左目の瞳を基準にして 正しい位置をマップします 満足なら完了をタップし ジョナサンに交代です
ドローイングは色と 左目からの距離として表現され マッピングされます 情報はプレイグラウンドの PlaygroundKeyValueStoreに保存 マッピングのコードは FaceView.swiftファイルにあり 私のメインページを汚さずに ユーザが精読できます ジョナサンも完了したので次へ
いいですね (拍手) 次のページの指示に従って コードを実行してみましょう
よく見えるように フルスクリーンにします 顔の検知以外は 何も起こっていません Yのサインを出してみて Swift Playgroundsが認識し… (拍手) やりました (拍手) Swift Playgroundsが Yのサインを認識し ジョイのドローイングを 顔面に投映します 次はGを試してみましょう
少し回転させて
ではNを試してみましょう できました いいですね 顔を替えることもできます
ハンサムね (笑い声) (拍手) Swift Playgroundsで すべての コードを書きiPadで実行しています 学習者や友達 Macのデベロッパ向けに カスタマイズもできます Swift Playgroundsで 楽しいコンテンツを作ってください
ジョナサンと私の プレイグラウンドは wwdcswiftplaygrounds 2019.github.ioで入手可能です さらなる情報は developer.apple.comで 明日 朝9時からの ラボにも是非ご参加ください 皆さんを歓迎します
残りも お楽しみください (拍手と歓声)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。