Appleの新しいプログラミング言語「Swift」は、Xcode 6とOS X Yosemiteの新しいベータ版と同じく、本日ベータ3で好評を博しました。この新しい言語は、以前のコードの不整合を修正し、以前のバージョンで発生したコードの問題を防止するための大幅な改良が施されました。
Apple は、iBooks で無料で入手できる「Introducing Swift」電子書籍も更新し、変更を反映させました。
Xcode 6 ベータ 3 における重要な変更点と解決された問題
Swift言語
Swiftプログラミング言語のオンラインドキュメントと書籍が更新されました。詳しくは https://itunes.apple.com/us/book/the-swift-programming-language/id881256329?mt=11をご覧ください。
- Swift の配列は、辞書や文字列がこれまで Swift で常に備えてきたような完全な値セマンティクスを持つように、完全に再設計されました。これにより、様々な可変性の問題が解決されます。「let」配列は完全に不変となり、「var」配列は完全に可変となります。また、辞書や文字列と適切に組み合わせられるようになり、その他のより深刻な問題も解決されます。NSArray や C の配列に慣れている方にとっては、値セマンティクスに驚くかもしれません。配列のコピーは、効率的な遅延コピー実装を使用して、すべての要素の完全かつ独立したコピーを生成するようになりました。これは配列にとって大きな変更であり、まだ対処すべきパフォーマンス上の問題がいくつかあります。詳細については、Swift プログラミング言語を参照してください。(17192555)
- 配列と辞書の「シュガー」構文が再設計されました。配列はInt[]ではなく[Int]として宣言し、Array<Int>の省略形となります。以前の構文は、配列のセマンティクスがC言語の配列に近い場合には意味を持ちましたが、新しい値セマンティクスのアプローチでは誤解を招く可能性がありました。これに伴い、辞書構文も改良され、[Key:Value]はDictionary<Key,Value>のシュガーとして扱われるようになりました。これらは互いに整合性があり、配列や辞書の構築に使用されるリテラル構文とも整合性が取れています。詳しくはSwiftプログラミング言語をご覧ください。
- NSDictionary* が Objective-C API から [NSObject : AnyObject] としてインポートされるようになりました。(16870626)
- 混乱と曖昧さを軽減するため、半閉範囲演算子が .. から ..< に変更されました。これにより、半閉範囲演算子と閉範囲演算子はそれぞれ ..< と … になりました (17203527)。nil は言語のリテラルとなり、_Nil 型のグローバル定数ではなくなりました。この変更により、nil に関するいくつかの問題が解決されました。例えば、コレクション内の nil や、nil から Any への変換などです。型は NilLiteralConvertible プロトコルに準拠することで、nil 互換であることを示すことができるようになりました (16951729)。
- CからインポートされたAPIは、基になる型を難読化していたCIntやCFloatといった型エイリアスを使用しなくなりました。現在はInt32やFloatなどとしてインポートされます。
- CからインポートされたCポインタを使用するAPIは、よりシンプルなAPI型構造でインポートされるようになりました。これにより、予測可能性が向上し、より多くのケースでconstの可変性が維持され、__autoreleasedポインタ情報も保持されます。UnsafePointer、ConstUnsafePointer、AutoreleasingUnsafePointerなどが表示されるようになります。関数ポインタもインポートされ、参照および受け渡しが可能になりました。ただし、C関数ポインタを呼び出したり、クロージャをC関数ポインタ型に変換したりすることはできません。
詳細については、Xcode 6 Beta 3 リリースノートを参照してください。(PDF)
(9to5Mac経由)