自作のProtocolを作成してデリゲート処理を行うことはよくあるだろう。
そのときデリゲートは以下のように弱参照にすべきケースが多い。

何故なら、こうしておかないと循環参照が発生してしまうことがあるからだ。

ただ、このソースのままだと以下のようなエラーが出てしまう。
'weak' cannot be applied to non-class type 'TestClassDelegate'
クラスじゃないと弱参照は出来ないと言われても、Protocolをクラスに変えるわけにはいかない。
どうしたものかと調べてみると、stackoverflowで答えが見つかった。

How can I make a weak protocol reference in 'pure' Swift (w/o @objc) - Stack Overflow

Protocolをクラスとして定義すれば良いとのこと。
実際に試してみた。

これでコンパイルエラーは無くなった。