[Swift]protocol、再び

Object Orientedではなく、Protocol Oriented(Swift)への理解を深めたい最近です。

https://www.raywenderlich.com/109156/introducing-protocol-oriented-programming-in-swift-2

の記事をざっと読みながら思ったのですが、protocolでは let の定義がつかえないことに疑問を覚えました。StackOverflowでも確かにありました。

http://stackoverflow.com/questions/34385897/why-i-cant-use-let-in-protocol-in-swift

protocolは抽象インタフェースになるので、具体的な値が入りません。letはconstantな振る舞いが必要ですが、protocol自体は具体的な値はその具体化されたstructやclass、enumなどで変化するためですね。なので、protocolでは var を使う必要があります。ただ、そのstructなどのprotocolを引き継ぐ時はその先で let を使ったりできます。

なるほどね。

ちなみに、以下がprotocolとそれを使ってstructやenum、extensionした簡単な例です。protocolで { set } を指定していると、当然ながらemutableではいられないので継承した先で同名の変数は let で定義することはできません。

extensionの書き方、 when Self: XXXX という感じて拡張する先を書くのですね。Elixirだとdefimplで for XXX みたいな感じで書いているところ。なるほど。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s