Swiftで遊ぼう! - 577 - プロトコール 2
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- Swift2.1 & Xcode7.1対応の日本語版アップルチュートリアル!
- 私の本業、オフィシャルなブログ-> Life-LOG
先週、間違えて他の記事をアップしたためこの記事を引っ込めました。Swiftで遊ぼう! - 572 - プロトコール - Swiftで遊ぼう! on Hatenaの続きです。
「詳解 Swift 改訂版」を超スローペースで進んでいます。
「プロトコール」に関する言葉を整理します。
ある型からみてプロトコールが組み込まれることを、英語で「conform」といいます。これを萩原さんは、「適合」あるいは「準拠」と訳していますが、私は以前から「準拠」という言葉を使っていたので、これからも「準拠」のままでいきます。
プロトコールを組み込むことを英語で「adopt」と表現されていますが、日本語訳が「採用」になっていました。私は、この「採用」と「準拠」を区別せずに使っていました。もう少し意識して使い分けていきます(^^;)
次に、実際のプロトコール使用例をみます。萩原さんの本のコードをそのまま見ていきますが、本で紹介されているコードではエラー表示が出るようになっていました。詳解 Swift 改訂版では、プロトコール内部の「var description」の前に「public」が入ってしましたが、Xcode7.2の環境でエラーが表示されます。「protocol内でpiblicは使えない」と言われます。仕様が変更されたのでしょう。
public protocol CustomStringConvertible { var description: String { get } }
「public」の扱いは、アクセス制御で説明されています。ある程度理解していますが、ここで説明はしません。
ここの「プロトコール」の説明ですが、プログラミング初心者は注意する必要があります。原書にもちゃんと記載があるように上記のプロトコールは「Swiftが標準ライブラリで提供しているプロトコール」になっています。これがどういうことか説明します。
Playgroundを使って、上記のプロトコールを採用する場合次のようにコードすると...
ちゃんとプロトコールに準拠しているように見えますが、「print(myTIme)」で、descriptionが表示されません。実は、このプロトコールが標準ライブラリで用意されているにも関わらず、プロトコールを上書きしてしまったためちゃんと動かないんです。標準ライブラリのプロトロールは、プロトコール宣言する必要がないんです!
次のように書くと、
「print(myTime)」でちゃんと表示されました!
初心者の頃は、プロトコール利用法に慣れる必要があります。
今日はこれだけ。