[解決済み] SwiftはPass By ValueかPass By Referenceか
質問
私はSwiftの初心者なのですが、クラスは参照渡しで、配列や文字列などはコピーされると読みました。
Objective-CやJavaのように、実際に参照を渡すのか、それとも参照渡しとなるのか、どちらでしょうか?
どのように解決するのですか?
SwiftのThingsの種類
というルールがあります。
-
クラスインスタンスは 参照型 (すなわち あなたの クラスインスタンスへの参照は、事実上 ポインタ )
-
関数は参照型
-
それ以外はすべて 値型 他のすべてとは、単に構造体のインスタンスと列挙型のインスタンスを意味し、それがSwiftにあるすべてだからです。配列と文字列は、例えば、構造体のインスタンスです。あなたは できる を使用して、それらのものへの参照を(関数の引数として)渡します。
inout
で、newacctさんが指摘されているように、アドレスを取ります。しかし、この型はそれ自体が値型である。
参照型が意味するもの
参照型オブジェクトは、実際には特別なものです。
-
単なる代入や関数への引き渡しで、同じオブジェクトへの複数の参照を得ることができる。
-
オブジェクトへの参照が定数であっても、オブジェクト自体は変更可能である (
let
明示的または暗示的に)。 -
オブジェクトへの変異は、そのオブジェクトへのすべての参照から見て、そのオブジェクトに影響を与える。
それらは危険なものである可能性があるので、気をつけましょう。一方、参照型を渡すと、ポインタだけがコピーされて渡されるので、明らかに効率的であり、些細なことです。
値域型が意味するもの
明らかに、値型を渡す方が "安全"であり、また
let
構造体インスタンスやenumインスタンスを
let
を参照します。一方、その安全性は、値のコピーを別に作ることで実現されていますよね?そうすると、値の型を渡すのが高くつく可能性があるのでは?
まあ、イエスでもありノーでもありますね。あなたが考えているほど悪いことではありません。Nate Cookが言っているように、値型を渡すことは
必ずしも
はコピーを意味する。
let
(明示的または暗示的に)不変性が保証されているので、何かをコピーする必要はない。また
var
を参照したからといって
する
コピーされるだけで
できる
必要であれば(突然変異があるため)可能です。ドキュメントでは、特に、些細なことにこだわらないようにと忠告しています。
関連
-
[解決済み] これを解決するにはどうしたらいいのでしょうか。UILabel.textは、メインスレッドからのみ使用する必要があります。
-
[解決済み] SwiftUIのFacebookログイン。FacebookのIDをビューに戻すには?
-
[解決済み] SwiftでString.Indexはどのように動作するのか
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Swiftで乱数を生成する方法とは?
-
[解決済み】String.substringWithRangeはどのように使うのですか?(または、SwiftでRangeはどのように動作しますか?)
-
[解決済み】C++で関数にオブジェクトを渡すには?
-
[解決済み】解決方法。iOS 13.0で'keyWindow'が非推奨になりました。
-
[解決済み】C#の参照型変数の "ref "の使い方は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Swift言語におけるエクスクラメーションマークの意味とは?
-
フォールスルーの使用方法概要
-
[解決済み] Fatal error.とは何ですか?Unexpectedly found nil while unwrapping an Optional value" とはどういう意味ですか?
-
[解決済み] SwiftでStringのサブストリングはどのように動作するか
-
[解決済み】Swiftで変数の型またはクラスを表示するにはどうすればよいですか?
-
[解決済み】解決方法。iOS 13.0で'keyWindow'が非推奨になりました。
-
[解決済み】Swiftはドキュメント生成に対応しているのか?
-
[解決済み】swift言語におけるstructureとclassの比較
-
[解決済み】swiftでDoubleを最も近いIntに丸めるには?
-
[解決済み] Swift言語でのエラーハンドリング