このプロトコルが必要です:
protocol AddsMoreCommands {
/* ... */
}
クラスUIViewController
を継承するクラスでのみ採用されます。 このページ は、次のように記述することで、(構造体ではなく)クラスによってのみ採用されることを指定できることを示しています
protocol AddsMoreCommands: class {
}
しかし、特定のクラスでのみ採用されることを要求する方法はわかりません。 後のページ 適合性をチェックするためにwhere
句をプロトコル拡張に追加することについて話しますが、それをどのように適合させるかわかりません。
extension AddsMoreCommands where /* what */ {
}
これを行う方法はありますか?ありがとう!
protocol AddsMoreCommands: class {
// Code
}
extension AddsMoreCommands where Self: UIViewController {
// Code
}
これは、拡張機能なしでも実現できます。
protocol AddsMoreCommands: class where Self: UIViewController {
// code
}
編集済み2017/11/04: Zig が指摘したように、これはXcode 9.1で警告を生成するようです。現在、Swift project (SR-6265) で報告された問題があります。警告を削除するには、それに注意を払い、それに応じて回答を更新します。
編集済み2018/09/29:class
は、インスタンスを格納する変数が弱い必要がある場合(デリゲートなど)に必要です)。弱い変数が必要ない場合は、class
を省略して次のように記述するだけで、警告は表示されません。
protocol AddsMoreCommands where Self: UIViewController {
// code
}
前の答えの問題のために、私はこの宣言で終わりました:
protocol AddsMoreCommands where Self : UIViewController {
// protocol stuff here
}
xcode 9.1で警告なし
Swift 5では、次の方法でこれを実現できます。
protocol AddsMoreCommands: UIViewController {
/* ... */
}
とても便利です。