protocolのSelf:11/17

公開日:2018-11-17
最終更新:2018-11-17

ささおです。

Qrunch初投稿です。 注意:何も解決しない記事です

Selfがあるprotocolはexitentialとして使うことができません。

protocolにSelf

protocol AProtocol {
    func a(hoge: Self)
}
class AClass: AProtocol {
    func a(hoge: AClass) {}
}
let aClass: AProtocol = AClass() // Protocol 'AProtocol' can only be used as a generic constraint because it has Self or associated type requirements

こんな感じですね。AProtocolをexitentialとしてしようしたところでコンパイルエラーになります。

extensionにSelf

protocol AProtocol {
}
extension AProtocol {
    func a(hoge: Self) 
}
class AClass: AProtocol {
    func a(hoge: AClass) {}
}
let aClass: AProtocol = AClass() // エラーが出ない
aClass.a(hoge: AClass()) // Member 'a' cannot be used on value of protocol type 'AProtocol'; use a generic constraint instead

こっちはAProtocolをexitentialとしてしようしたところではコンパイルエラーにならず、 Selfを利用した関数を呼び出す段階でコンパイルエラーになります。

なんというか全体的によくわからん。。。

記事が少しでもいいなと思ったらクラップを送ってみよう!
36
+1
@sasaoの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする