Swiftブログの要点まとめ 2015

appleの公式Swiftブログ(英文)
の各記事の要点を日本語でまとめます。
英語のトレーニングを兼ねて...


Swift is Open Source
2015年12月3日
Swiftはオープンソースになりました。
関連項目は
  • Swift.org Swiftに関わる人のためのサイト
  • github.com/apple ソースコードの置き場
  • Swiftパッケージマネージャーというコードを共有したりビルドするためのツール
  • Swiftネイティブコアライブラリというスタンダードライブラリの上のレベルのもの
  • LinuxだけでなくAppleのプラットフォームにも対応



Literals in Playgrounds
2015年10月7日
Playgroundでファイル、色、画像の扱いが可能になりました。



Swift 2 Apps in the App Store
2015年9月21日
Swift 2で作成したアプリが提出可能になりました。
Xcode 7はSwift 2を含みます。Swift 1.2から変更するにはEdit > Convert > To Latest Swift Syntaxを使用して下さい。
OS X El CapitanでXcodeを使うならXcode7を要求します。Xcode 6を使い続けるならOS X Yosemiteのままにして下さい。Xcode 7とYosemiteの組み合わせはOK。



Swift-er SDK
2015年8月12日
Xcode 6.3でObjective-Cに新しい機能のnullability annotationsが付きました。SwiftのOptionalに相当します。



Strings in Swift 2
2015年7月23日
Swift 2ではStringの仕様が変わります。
今までStringはCharacterのコレクションとして扱ってきましたがSwift 2ではそうではありません。Swift 2ではStringはcharactersというプロパティを持ち、そのcharactersプロパティがコレクション(文字の集まり)の性質を請け負います。
変更の理由は、StringはArrayやSet,Dictionaryといったコレクションとは極めて異なる振る舞いをしなければならないことです。このStringの性質はもとからなのですが、Swift 2からプロトコルエクステンションが採用されたことに伴い、Stringの仕様に根本的な変更をする必要が出て来ました。cafeのeの上に印がついた文字を例に出してStringの特殊性を説明している。
stringsとコレクションの性質の違いですが、同一性の決定においても違いがあります。コレクション同士の比較では各要素の一致が条件ですが、stringsでは表現しようとしているものが同じかどうかに基づきます。これは韓国語を例に出して説明している。
String自体はコレクションではないのですが、コレクションとして見ることが出来るものを内部に持ちます。Character、Unicode Scalar Value、UTF-8、UTF-16など。



Swift 2.0
2015年7月8日
WWDCでSwift 2.0が発表になりました。

オープンソース化
2015年の終わりにSwiftはオープンソースになります。
オープンソース化の特徴は、OSI-approved permissiveライセンス、他社の貢献が可能、OS X, iOS, Linux向けのポート(?)、Swiftコンパイラとstandard libraryのソースコード公開、好きなプラットフォームへの対応可能。

新しい特徴
エラーハンドリング、ターゲットの世代の違いに対応できるAvailability、プロトコルエクステンション、Objective-Cの改良(nullability annotations and generics)により全体はよりSwiftらしく。



Memory Safety: Ensuring Values are Defined Before Use
2015年4月24日
Swiftの設計時に大切なことはメモリの安全性です。メモリの安全性とはここでは、変数が使われる前に初期化されていることを指します。

Swiftの基本的なやり方
コンパイラが分析を行い、使われる前に初期化がされているかチェックします。宣言時に初期化されていなくても使用時に初期化されていることが保証できればよしとします。分析は信頼性があり予測可能なものに限ります。また分析量に限界があり、あまりに複雑な構造は分析出来ません。



Increasing Performance by Reducing Dynamic Dispatch
2015年4月9日
継承関係のある設計のクラスにて、実行時にどのメソッドやプロパティを参照するかを決める機能(dynamic dispatchと呼ばれる)は実行時に一定の処理コストがかかります。この記事ではパフォーマンスを改良する3つの方法を紹介します。final、private、モジュール全体の最適化です。

オーバーライドされることがないものにfinalを使う。これによりコンパイラがdynamic dispatch処理を省くことが出来ます。finalはプロパティ、メソッド、そしてクラス自体にも付けることが出来ます。

priveteは同じファイル内からのみアクセスを可能にするものです。priveteのものがオーバーライドされているかどうかは同じファイル内のみ調べることで確認出来ます。オーバーライドされていないことがコンパイル時に確認できればコンパイラはdynamic dispatch処理を省くことが出来ます。priveteはプロパティ、メソッド、そしてクラス自体にも付けることが出来ます。

最後がモジュール全体の最適化です。その前に必要な前提知識が2つ。
1、internalというアクセス修飾子はアクセスをモジュール内に限定します。何もアクセス修飾子を付けない場合のデフォルトもinternalです。
2、Swiftのコンパイルは通常ファイルごとに行います。これはモジュールの一部分です。
で、コンパイラは部分毎にコンパイルする場合、internalのものが(モジュール内の他の部分で)オーバーライドされているかどうかは判断できません。しかしWhole Module Optimizationを有効にすると、モジュール内が全て一緒にコンパイルされます。これによりコンパイラはinternalのものがオーバーライドされているかどうかを確認することが出来、オーバーライドされていないものをfinal扱いとすることができます。



New Playgrounds Part 2 - Sources
Playgroundに別のソースファイルを加えることが出来ます。プロジェクトナビゲータ(Xcodeの左のほうに表示されるあれ)のSourcesフォルダーに放り込んでください。ここに加えられたものはコンパイルは一度だけされます(playgroundで何か書く毎にコンパイルされるのではない)。



Nullability and Objective-C
まだ



New Playgrounds
Playgroundに新しい機能が付きました。

Inline results メインエディターウインドウに実行結果を表示します(何かそこに表示する方がよいものがあるとき)。
Stylized text マークダウン方式でコメントを入れることが出来ます。
The Resources folder Playgroundで使いたい画像などをResourcesというフォルダーに入れておくと使えます。

マークダウン方式のコメントの入れ方はデモをダウンロードして、Editor -> Show Row Markupを選択するとソースが見れます。



The as! Operator
Swift 1.2ではキャストを
・コンパイラが、キャストが成功する保証をできるもの
・コンパイラが、キャストが成功する保証をできないもの
の2つに分け、それぞれに別のやりかたにします。成功する保証があるキャストにはas、成功する保証がないキャストにはas!を使います。as!を使ったキャストに失敗したときは実行時エラーとなります。
この2つのほかにas?もあり、これは成功する保証がないキャストに用いるもので、キャストに失敗したときはnilを返します。as?の実行結果はoptional型です。



Swift 1.2 and Xcode 6.3 beta
コンパイラの改良点
Incremental builds デフォルトの設定として、変更されていないファイルは再ビルドしない。
Faster executables デバッグビルドは速い実行が可能なバイナリを生成します(訳に自信なし)。新しい最適化はさらにリリースビルドの性能をよくします。
Better compiler diagnostics コンパイラの診断機能がよくなり、fix-itも含めエラーやワーニングのメッセージがわかりやすくなり、適切なSwift1.2のコードを書けるようになります。
Stability improvements もっともひどかったコンパイラのクラッシュの原因が修正されました。SourceKitのワーニングを見ることが少なくなります。

Swift言語の新機能
as! for failable casts 失敗の可能性があるキャストにas!を使用して、パッと見てわかるようになります。
Nullability may now be expressed in Objective-C headers Objective-Cのポインタとブロックにnilの有無の性質を付加することが出来ます。
Swift enums can now be exported to Objective-C using the @objc attribute Swiftのenumは@objcを付けることによってObjective-Cから見れます。
let constants are now more powerful and consistent letで宣言された定数は使用の前に初期化されていればよい。初期化は一度のみ許可され、再度代入することはゆるされない(訳に自信なし)。
More powerful optional unwrapping with if let if let文の条件に複数の文が書けます。
New native Set data structure NSSetからブリッジ(簡単な移行)出来る、順番の概念がなくて重複のない集まり「Set」



New Swift Development Courses Available on iTunes U
iTunes Uで人気があるiOS開発コースの一つであるスタンフォード大学のコースがSwiftに変わりました。"Developing iOS 8 Apps with Swift"です。
他の大学、例えばPlymouth Universityもあります。

コメント