問題タブ [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 に答える
302 参照

swift - 構造体/プロトコルを使用した迅速なポリモーフィック クロージャ ディスパッチ

サービスに引数クロージャを 1 つ登録するか、引数クロージャを登録しない場合があります。利用可能な引数は常にありますが、簡潔にするために、arg クロージャーも登録せず、その場合は利用可能な引数なしでクロージャーをディスパッチできるようにしたいと考えています。強力な OO と動的型のバックグラウンドから来て、ポリモーフィック ディスパッチとクラス継承ツリーが大好きで、型自体が理解できるようにすることで、次のことをまとめることができます。

そのため、コンソールに42続いて表示されます。something happened偉大な。

structしかし、 and/orを使用してこれを行うことを検討したいと思いenumます。値のセマンティクスは大流行しています。アプローチは比較的簡単だったenumと思います:

アプローチを行うにstructは、プロトコルを使用して の共通インターフェイスをキャプチャする必要があることを理解していますpublish(value:T)。しかし、プロトコルは明らかにジェネリックと混在できないため、混乱が生じるのはここからですか? 私は試した:

これにより、下部に多くのエラーが発生します。extension NullaryAction<T>:Action拡張機能をジェネリック (例: )として実行しようとしましたが、拡張機能に式をT配置したにもかかわらず、使用されていないことがわかりtypealiasました。

構造体/プロトコルでこれを行うことは可能ですか? 列挙型ソリューションには満足していますが、構造体/プロトコルのアプローチでは実現できなかったことに失望しました。

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

swift - Swift のクラス内部プロトコル

Swift でクラス内部プロトコルを実装するにはどうすればよいですか?

問題はそれです

エラーが発生します

宣言はファイル スコープでのみ有効です

問題を回避するためのアイデアはありますか?

除外:クラスのみのプロトコルについては言及しませが、もちろん可能です。

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

swift - 2 つのプロトコルによるプロトコル タイプの制約

以下の2つのプロトコルをswift 2でセットアップしました

  • アイテムの配列を保持し、カウントや添え字などのデータソースのような機能を提供するジェネレーティブ (より適切な名前がないため)

したがって、オブジェクトが Generative と Selectable の両方を実装する場合、選択したインデックスを返せるようにしたいので、次の関数を書きました。

何らかの理由で、リンカーは次のように出力します。

信号が原因でコマンドが失敗しました: セグメンテーション違反: 11

理由がわからないので、この関数を指定して、両方のプロトコルを実装し、関連する型が一致するオブジェクトで動作するようにする別の方法がわかりません...何かアイデアはありますか?

PS Gist のコード: https://gist.github.com/edwardIshaq/715b0e134fb47d2e28cc

------- 計算されたプロパティを削除する更新は、トリックを行うように見えました:

0 投票する
3 に答える
21434 参照

swift - ViewController と ContainerViewController の間でデータを渡す

私はアプリに取り組んでおり、ビューと containerView の間でデータを渡す必要があります。両方のビューからデータを送信し、データを受信する必要があります。

もっと詳しく説明しましょう:

ラベル マスター(コンテナ ボタンをタッチ) はプロトコルで変更できますが、ラベル コンテナ(マスター ボタンをタッチ)を変更することはできません。何が起こるかというと、マスターは次の方法でコンテナーに接続します。ただし、マスターにリンクするフォロー コンテナーはありません。

追加しようとしましたが、セグエにしましたが、うまくいきました。

ここに画像の説明を入力

マスター ビュー コントローラー:

コンテナ ビュー コントローラ:

誰かが私を助けることができますか?

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

swift - Swift 2: プロトコルの関数のデフォルト実装で要素の型を参照する方法

REST API からいくつかのオブジェクトを取得し、ObjectMapper を使用してそれらをローカル オブジェクトにマップする必要があります。

これらのオブジェクトには、多数の列挙が含まれています。それらはすべて整数として来ており、それらをローカルに記述された列挙型にマップしたいと考えています。

そのためには、ObjectMapper で使用される標準の変換関数を記述する必要があります。

TransformOf<..>問題は、これらの列挙が多数あり、リストの最初の引数が各列挙に固有であることを除いて、すべての関数がまったく同じであることです。

私がやりたいことは、その関数のデフォルトの実装で共通のプロトコルを作成することです。

...そして、実装を含むプロトコルを私が持っているすべての列挙に適用します。

明らかに参照がself.Typeそこで機能していません。最終的に関数を使用する特定のインスタンスのタイプを一般的に参照する方法がわかりませんか? おそらく私はその問題を解決する間違った方法を考えています。

0 投票する
4 に答える
24313 参照

ios - Swift で let in プロトコルを使用できないのはなぜですか?

varキーワード { get set }の使用について、Swift のプロトコルについて疑問があります。

Appleのドキュメントから:

プロトコルがプロパティを取得および設定可能にする必要がある場合、そのプロパティ要件は、定数格納プロパティまたは読み取り専用の計算プロパティでは満たすことができません。プロトコルがプロパティを取得可能にすることのみを必要とする場合、その要件はあらゆる種類のプロパティによって満たすことができ、これが独自のコードに役立つ場合は、プロパティが設定可能であることも有効です。

プロパティ要件は、常に変数プロパティとして宣言され、var キーワードがプレフィックスとして付けられます。取得可能および設定可能なプロパティは、型宣言の後に { get set } と書くことで示され、取得可能なプロパティは { get } と書くことで示されます。

letが使えない理由がわかりません。getのみを使用するプロトコルのvarは、 letだけではありませんか?

このようなもの:

それはただではありません:

何か足りない?