問題タブ [swift-protocols]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
488 参照

swift - Swiftでジェネリックを使用して拡張機能でオプションのクラスメソッドを使用してプロトコルを使用するには?

次のようなクラスメソッドを持つ既存のクラスの拡張機能を使用しようとしています:

そして、私はこのプロトコルを次のような一般的な拡張機能で使用しています:

これは機能するはずですが、ビルドすると、Xcode は「コマンド /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1」と表示します。プロトコルで「オプション」を使用しない場合、拡張機能で foo() をアンラップする必要はなく、「セルフ」を削除してもすべてが正常に機能します。オプションを適切に機能させる理由と方法を誰か教えてもらえますか? 前もって感謝します。

0 投票する
1 に答える
643 参照

swift - 空の拡張子で @objc プロトコルへの準拠を宣言すると、EXC_BAD_INSTRUCTION で壊れます

アレイと組み合わせた Swift プロトコルで多くの問題を抱えていましたが、問題が遊び場で壊れ始める前に、問題全体を再現することさえできませんでした。これは最小限の例です。

Bus2 つのプロトコルと、いずれかのプロトコルへの準拠を宣言するクラスがあります。さらに、 の空の拡張はBus、他のプロトコルへの準拠を宣言します。

コンソール出力はランダムに見えるかもしれませんが、そうではありません。のインスタンスを作成しようとすると、一貫して取得されますBus:

  • @objcすべての属性をコメントアウトすると、エラーはなくなります
  • 準拠していない場合、エラーはなくなりUtterableます。extension Bus: Utterable{}

私のプロトコルに属性が必要な理由@objcは、そうしないと Obj-c ランタイムが次のようなことをしようとしたときに文句を言っvar myDisplayables: [Displayable] = [ Bus() ]たり、プロトコルへの準拠を動的にチェックしたりするためです。

繰り返しますが、これは最小限の例であることに注意してください。

Swift 1.2 で更新: 現在は修正されているようです。Xcode は、「プロトコルが必要とするため」、これらの変更を提案しています。

0 投票する
1 に答える
622 参照

ios - Swift プロトコル継承の使用

Bluetooth LE、Bluetooth などのデバイスを補うために従来のポリモーフィズムを使用するデリゲートを作成しようとしていますが、キャストするための正しい構文を取得できないようです。

ここに私の親プロトコルとクラスがあります:

ここで、子クラスとプロトコルを簡略化して示します。

その関数の最初の行で次のエラーがスローされます。

通常のオブジェクトのように子へのキャストを許可する必要があるため、これは私には意味がありません。

@objc を BluetoothDelegate の前に置くと、次のエラーが発生します。

誰でもこれについて何か考えがありますか?

0 投票する
1 に答える
579 参照

swift - クラスで宣言されたenumをSwiftのクラス自体のプロトコルで使用しますか?

Swift で前方宣言のようなことを行うにはどうすればよいですか?

クラスの前に宣言されたプロトコルがありますが、プロトコルはクラスの前に宣言された列挙型 (recordType) を使用する必要があります。

現在、Swift コンパイラはUse of undeclared type 'recordType'エラーで不平を言っています。ここでの Objective-C では、ある種の前方宣言を行いますが、Swift はどうでしょうか?

補足的な質問として、「Type」は明らかに列挙型の予約済みのケース ワードであるため、上記では Type ではなくケース タイプを宣言する必要があったことがわかります。これを克服する方法はありますか?(もちろん、私がしたように名前を変更することは別として)

0 投票する
1 に答える
293 参照

swift - カスタム GeneratorType を返す

コレクションに基づいてランダムジェネレーターを提供するクラスがあります。
これはランダム ジェネレーターであるため (コレクションが空でない限り、next() は nil を返すことはありません)、このジェネレーターを sequenceType として使用できるようにしたくありません (無限ループを回避するための「for in」サポートはありません)。

メソッドの署名を正しく取得できないようです。

これは私が構築したもののスケルトンです。対応するコンパイラ エラーを含む 3 つの試行を含めました。

0 投票する
1 に答える
251 参照

swift - オプションのメソッドでプロトコルをラップする方法は?

タスクは単純です。ラップされたオブジェクトにすべてを委譲するラッパーを作成する必要があります。ラップされたオブジェクトのタイプのみが、オプションのメソッドを含むプロトコルです。私のラッパーは、同じプロトコルを実装することです。

オプションのメソッドについてはどうすればよいですか? できます:

  1. それらをラッパーに実装できます。しかし、それらがラップされるオブジェクトによって実装されていない場合、この実装から何を返すのでしょうか?
  2. それらを実装しないでください。その場合、ラッパー オブジェクトはラップされたオブジェクトの一部の機能を提供しませんが、これは望ましくありません。

より良いオプションはありますか?私はSwiftで作業していることに注意してください。