小ネタですが、1時間ぐらい調べてしまったので、書いときます。
あなたはわかりますか?
AppleのMapkitにGeoJSONを処理するクラスがあって、それを仕事でゴニョゴニョしています。
そんな中、こんなプロパティを見つけました。
var geometry: [MKShape & MKGeoJSONObject] { get }
これを最初見たとき、「え? 型2つあるやん!」(誤解)と焦りました。
答え
正解は、MKGeoJSONObjectはprotocolで、型はMKShapeだけです。
MKShapeはClassなので、MKGeoJSONObjectに従うClass=MKShapeという指定でした。
プロトコルコンポジションというカッコいい名前があるみたいです。
プロトコルコンポジションするときは、だいたい下記みたいに、カンマで区切るのが多いので、
今回みたいに&でつなぐパターンもあるのか〜と新発見しました。
class hoge: protocolA, protocolB,…
これをプロパティの型に指定して書いてやると、
var any: [hoge & protocolA & protocolB]
こんな感じになるわけですね。
「,」区切りのときも継承クラスとの区別がわかりづらいな〜と思っていましたが、
「&」区切りだと完全に型とプロトコルが同列に並んでるように見えて、僕にはわかりづらく感じます。
慣れなんですかね?