Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 577 - プロトコール 2

先週、間違えて他の記事をアップしたためこの記事を引っ込めました。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を使って、上記のプロトコールを採用する場合次のようにコードすると...

f:id:yataiblue:20160201151246j:plain

ちゃんとプロトコールに準拠しているように見えますが、「print(myTIme)」で、descriptionが表示されません。実は、このプロトコールが標準ライブラリで用意されているにも関わらず、プロトコールを上書きしてしまったためちゃんと動かないんです。標準ライブラリのプロトロールは、プロトコール宣言する必要がないんです!

次のように書くと、

f:id:yataiblue:20160201151724j:plain

「print(myTime)」でちゃんと表示されました!

初心者の頃は、プロトコール利用法に慣れる必要があります。

今日はこれだけ。