ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Foundationの最新情報
Foundationフレームワークは、macOS、iOS、watchOS、tvOS SDKの全体で使用されるAppやフレームワークのための、ベースとなる機能を提供します。このセッションでは、Foundationのコレクション、パフォーマンス、国際化機能と、Swiftとの統合に対する有益なエンハンスメントについて取り上げます。
リソース
関連ビデオ
WWDC19
-
ダウンロード
(音楽)
(拍手) こんにちは Foundationチームのティナです Foundationに追加された APIを紹介します 早速 始めましょう スライドの項目が今日の内容です
まずはOrdered Collection Diffingから コレクション間の差分を 埋めることができるAPIです 例を挙げて説明しましょう 文字列“BEAR”を“BIRD”にするには どうしますか?
“BEAR”には “E”と“A”ではなく― “BIRD”の“I”と“D”が必要です
そこで “E”と“A”を削除します そして “I”と“D”を挿入します
変換するために 2文字削除して 2文字挿入しました
Order Collection Diffingを使えば より簡単です
“diff”には差分が代入されます 挿入 削除の対象となる要素が コレクションに格納されるのです 差分を埋める要素も格納されます 挿入と削除した2文字が入ります
これを“newBird”に適用させます 文字列以外の型にも使える 非常に有効なAPIです 次の内容に移ります データと連続性の説明です
アプリケーションはディスク上の ファイルを使うことがあります こうした形式のデータには 連続領域のメモリが割り当てられます
ダウンロードされたデータは どうでしょう? 例えば 送信データやセッション情報です この場合 データがバラバラに到着し メモリを断片的に占領します
Swift 5以前は どちらの領域にも データを割り当てていました 使いやすい インターフェイスでした しかし 未使用の領域にも バッファアクセスを許すには 連続領域へのコピーが必要でした
パフォーマンスが不安定になることも ありました 実際に使われているデータでも 最終的には― 断片的なデータは 連続した領域に割り当てられます
そこで Swift 5以降は 連続領域への割り当てを保証します シンタックスで実装すべく ContiguousBytesを導入しました
このプロトコルがあれば 未使用の領域にも直接― 連続した形で割り当てられます 誤って割り当てられる心配が なくなります
さて 他のバッファタイプの扱い方は どうでしょう?
私たちは2つのプロトコルを 導入しました 1つ目は 様々なバッファタイプに適用する― バイトの集まりである DataProtocolです 2つ目は可変性を提供する MutableDataProtocolです
Foundationや Swiftの標準ライブラリ― Dispatchフレームワークで使えます 皆さんが扱っているのはDataや UInt8の配列 DispatchDataでしょう 型やメソッドにも 導入することをお勧めします
次は 圧縮の話です データは なるべく小さくしたいでしょう デバイスのディスク容量が少なかったり ネットとのリソース送受信が 必要な場合です
よくある課題です そこで 圧縮用のAPIを追加しました シンプルな… (拍手) どうも (拍手) コードはたったの1行です
APIは4つの圧縮方法をサポートします 速度 メモリ 圧縮率によって 異なる方法を提供します 必要な圧縮方法が見つかるでしょう
次は単位の話です Foundationのクラスは 一般的な単位をサポートしています 例えば 長さや速度などです
UnitDurationクラスは ピコ秒まで対応可能になりました 1兆分の1秒のことです
ヘルツを扱うUnitFrequencyクラスには framesPerSecondが追加されました
機能的には変わりませんが フレームレート計算を行うのに 理想的です
新しいUnitInformationStorageは― デジタル情報の表示に使われます 基本的な単位はビットやバイトと ニブルです また よく使われるSI接頭語として キロ キビ ヨタ ヨビを サポートしています
データサイズのフォーマットには MeasurementFormatterや ByteCountFormatterを活用できます
それだけではありません よく目にする文字列ですよね 例えば“1時間前に既読になりました” “支払期日は明日です” これは 現時点から見た日時を 表示しています 地域ごとの日時を表示するのは 大変なので― RelativeDateTimeFormatterを 作りました (喝采) どうも 返ってくる文字列は ローカライズされていて 様々なスタイルで活用できます
リストも簡単にフォーマットしたいので ListFormatterを追加しました (拍手) リストを文字列に変え― すべての地域で使用できる形式にします
別の例を挙げます 3つの日時で行われる イベントがあるとします スライドの上部のような文字列か― 月の名前まで出した 下部のように表示したいでしょう
もちろん ローカライズされた状態で 表示したいはずです これは重要なことです というのも 欧州では 日付は月の前に書きます
この場合もListFormatterが便利です
itemFormatterで処理すれば― リストの各アイテムを変換できます 今回は日付をフォーマットします サポートされているDateFormatterを itemFormatterとして使いましょう
すべての準備が整いました これで文字列をローカライズできます
日付のスタイルも簡単に変更できます ListFormatterは すべての形式に適用するので 文字列のローカライズに 活用してください
次はOperationQueueの説明です
バックグラウンドで 複数のタスクが稼働中とします
この時 使用中のAppの状態を 保存したい場合― どうしますか? まずは 全タスクを 完了させてください そこで こんな処理をしたくなるかも
実行中のオペレーションの数を 確認する処理です 戻り値が0なら すべてのタスクが終了しているので 保存できますよね? いいえ 保存しないでください
他のタスクが 実行される可能性があります 確認直後や保存直前に 実行されるかもしれません
本当に必要なことは 保存処理を保護することです 保存中に他のタスクが 実行されないようにしましょう こういうことです
OperationQueueは 保存処理を保護できます addBarrierBlockを活用して 処理を保護してください そうすれば 保存処理だけが 実行されるタスクだと保証できます また 他のタスクの終了後に 保存を行うので 新しいタスクが 実行されることはありません
(拍手) ProgressReportingも追加されました 実行中のジョブの 進行状況を確認して― 表示したい時もあるでしょう totalUnitCountを使えば OperationQueueの進行状況が分かります
OperationQueueに追加したタスクが 1つ終了すると 全体の進捗も1つ カウントされます
次はファイルシステムです iOSはUSBとSMBを サポートするようになりました 別のボリューム上の ファイル操作が可能になります FileManagerのitemReplacement Directoryを使いましょう ファイルの書き込み場所を選ぶ時や Atomic Safe-Saveを使う時です
次に ボリュームの消失に備えましょう USBを取り外したり SMBサーバの接続が途切れると危険です メモリ・マップト・ファイルを選ぶ時は mappedIfSafeを使ってください ファイルを仮想メモリに マッピングできます ただし 固定したボリュームだけが 対象です USBやSMBへのアクセスは かなり遅いと感じるかもしれません 次のことを試してください アクセスをメインスレッドに集中させ アプリケーションの応答をよくします
ファイルシステムの性能も 確認しましょう 例えば APFSの特徴である クローン作成は USBやSMBを経由すると 使えないかもしれません
こうした性能は URLResourceKeyでテストできます または エラーハンドリングを 準備しておきましょう より詳しい情報は 別のセッションで説明しています
次はSwiftの話です
SwiftのAPIは Objective-Cを考慮していますが― 長年かけて改善を続けてきました それがScannerです
Swift 4のAPIで NSStringが使われていました 戻り値は参照渡しされます
Swift 5.1では 同じことを 1行のコードで実現します
更に 新しいAPIでは 文字列が使用されます 文字コードではなく 文字や記号の集合です つまり 複雑なシーケンスである― 絵文字などにも 完璧に対応できるのです
FileHandleも改善されました ファイル記述子にエラーが起きた際に 例外を投げます エラーを前提としたAPIなので 呼び出し側でのエラー処理が可能です
データの書き込みにも DataProtocolがあり 断片的なデータを処理できます
注目すべきAPIの説明でした ぜひ 紹介した機能を 試してみてください バイナリデータを扱う処理には DataProtocolを検討してください UInt8の配列などを使う 代わりになるはずです
文字列を使って 日付やリストを表示する時は― ListFormatterなどを使いましょう どの地域でもうまく動きます
競合状態を防ぐには OperationQueueが便利です 進行状況を知る仕組みを使う場合にも OperationQueueをお勧めします 以上です (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。