web-dev-qa-db-ja.com

let in swift)を使用してNSMutableArrayがオブジェクトを追加するにはどうすればよいですか

Swift letを使用してNSMutableArrayを作成しました。mutableArrayにaddObjectを追加すると、letを使用して定数を割り当てても追加されます。 。letがどのように迅速に機能するかを誰かが説明できますか?後で値を追加できない場合、次のコードはどのように機能しますか?

let arr : NSMutableArray = [1,2,3,4,5]
arr.addObject(6)
println(arr)
8
abhiDagwar

免責事項:この回答はNSタイプのデータ構造にのみ適用されます。全体像については@EricDの回答を参照してください。

letをクラスとともに使用すると、変数を別の配列などに変更できないことを意味します。配列を編集可能にしたくない場合は、可変ではなく通常のNSArrayを使用してください

let arr : NSMutableArray = [1,2,3,4,5]
arr = [1,2,3,4,5] //error trying to assign to a let variable that has already been assigned

arr.addObject(6) //fine because we are not changing what is assigned to arr, but we are allowed to change the object that is assigned to arr itself

定数変数とは何かについてのあなたの理解は少し厳しすぎると思います。

9
Fonix

クラスは参照型であり、NSMutableArrayはクラスです。

FoundationのNSMutableArrayはSwiftの配列とは異なります。後者は値型です。

定数NSMutableArrayを作成する場合:

let ns: NSMutableArray = ["a", "b"]

その後、これは機能します:

ns.addObject("c")

しかし、これはしません:

ns = ["d", "e"]   // nope!

参照の内容は変更できますが、定数に割り当てられている内容は変更できないためです。

一方、Swiftの配列では:

let sw: [String] = ["a", "b"]

定数は参照ではなく値であるため、変更できません。

sw.append("c")   // nope!

Doc: 構造と列挙は値型です および クラスは参照型です

11
ayaio