問題タブ [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.
swift - プロトコル タイプを渡すときのエラー「Inout 引数は ... 以外のタイプの値に設定できます」
私は C++ から Swift に移行しています。私はプロトコルと構造体に関してこの状況を持っています (私は乱数を扱っています):
(1) 0 と 1 の間の Float を返すRandomPr
ようなメソッドがあることを指定するプロトコル。
(2) " real」乱数ジェネレーター。
(3)を実装する構造体ですが、インスタンスを呼び出すと逆流する Float の配列をロードするなどの追加のメソッドがあります。(テスト目的のため。)randFloat()
RandomS
RandomPr
FakeRandomS
RandomPr
loadFloat()
randFloat()
FakeRandomS
これで、 と の両方でDoSomething(rng: inout RandomPr)
使用したい関数 ができました。RNG を更新する必要があるため (本物か偽物かに関係なく)、パラメーターは in-out でなければなりません。のインスタンスで問題なく呼び出すことができます。RandomS
FakeRandomS
DoSomething
RandomS
でももしそうなら
「Inout 引数が 'FakeRandomS' 以外のタイプの値に設定される可能性があります。推奨される修正は、次のように定義することです」というエラーが表示されますfakeRng
。
しかし、メソッドがなく、コンパイラがそれを認識していないためloadFloat
、 onを呼び出そうとするとfakeRng
失敗します。RandomPr
loadFloat
fakeRng
FakeRandomPr
持っている余分なメソッドを含む別のプロトコルを作成しFakeRandomS
て、定義しようとしました
しかし、イライラすることに、「Inout引数を...以外の型の値に設定できます」というエラーが再び表示されます。
これと同等のことを C++ で問題なく行うことができました (純粋な抽象基底クラスと 2 つの子クラスを参照渡しで渡しました)。また、渡したいものの 1 つに追加のメソッドが含まれていても問題ありませんでした。これをプロトコルと構造体に変換したいと思います。Swift ソリューションとは何ですか?