プロトコルは型注釈(型アノテーション)などの型指定に使用できます。つまり構造体・クラス・列挙型と同じように「型として使用できる」ということですね。
sample1
protocol ProtocolA{ var prop:Int{get} } func printProp(a:ProtocolA){ print(a.prop) } struct StructA:ProtocolA{ var prop=1002 } let structA=StructA() printProp(a:structA)
1002
sample1の関数printPropはProtocolAプロトコルに準拠した型のインスタンスを引数として受け取り、受け取ったインスタンスのpropプロパティを表示する関数です。引数の型注釈としてProtocolA型を指定していますので、引数として渡せるのはProtocolAに準拠した型のインスタンスのみ、ということになります。
sample1では、ProtocolAに準拠した構造体StructAを定義し、StructA型のインスタンスを生成、それをprintProp関数に渡しています。
structAのプロパティpropには1002がセットされていますので、それが表示されます。