問題タブ [inout]

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 に答える
81 参照

swift - プロトコル タイプを渡すときのエラー「Inout 引数は ... 以外のタイプの値に設定できます」

私は C++ から Swift に移行しています。私はプロトコルと構造体に関してこの状況を持っています (私は乱数を扱っています):
(1) 0 と 1 の間の Float を返すRandomPrようなメソッドがあることを指定するプロトコル。 (2) " real」乱数ジェネレーター。 (3)を実装する構造体ですが、インスタンスを呼び出すと逆流する Float の配列をロードするなどの追加のメソッドがあります。(テスト目的のため。)randFloat()
RandomSRandomPr
FakeRandomSRandomPrloadFloat()randFloat()FakeRandomS

これで、 と の両方でDoSomething(rng: inout RandomPr)使用したい関数 ができました。RNG を更新する必要があるため (本物か偽物かに関係なく)、パラメーターは in-out でなければなりません。のインスタンスで問題なく呼び出すことができます。RandomSFakeRandomSDoSomethingRandomS

でももしそうなら

「Inout 引数が 'FakeRandomS' 以外のタイプの値に設定される可能性があります。推奨される修正は、次のように定義することです」というエラーが表示されますfakeRng

しかし、メソッドがなく、コンパイラがそれを認識していないためloadFloat、 onを呼び出そうとするとfakeRng失敗します。RandomPrloadFloatfakeRng

FakeRandomPr持っている余分なメソッドを含む別のプロトコルを作成しFakeRandomSて、定義しようとしました

しかし、イライラすることに、「Inout引数を...以外の型の値に設定できます」というエラーが再び表示されます。

これと同等のことを C++ で問題なく行うことができました (純粋な抽象基底クラスと 2 つの子クラスを参照渡しで渡しました)。また、渡したいものの 1 つに追加のメソッドが含まれていても問題ありませんでした。これをプロトコルと構造体に変換したいと思います。Swift ソリューションとは何ですか?