SwiftのArrayをNSArrayと同様に参照渡しで使えますか?

投稿者: Anonymous

お世話になります。

SwiftのArrayは値渡し、NSMutableArrayは参照渡しと聞きました。

SwiftのArrayでも、NSMutableArrayのように参照渡しで使用することはできないのでしょうか?

値渡しですと、Arrayの要素を変更した後に、再度Arrayに代入しなおすいうことが必要になると思います。
その点では、NSMutableArrayの方が使いやすいと思うのですが。
SwiftのArrayでも同様のことができますか?

ご教示お願いいたします。

解決

Swiftには値型と参照型があります。参照型を使ってデータを管理すれば、ArrayをNSMutableArrayと同じように使えます。

Xcode 7.1.1のPlaygroundで確認。

import Foundation

/// 参照型でデータを管理
class RefType : CustomStringConvertible {
    var no = 0
    var name = "name"

    init(no: Int, name: String) {
        self.no = no
        self.name = name
    }

    var description: String {
        return "no:(no) name: (name)"
    }
}

func testRefType() {

    // 参照型の配列を作成
    var ar = [RefType]()

    let t0 = RefType(no: 1, name: "one")
    ar.append(t0)

    let t1 = RefType(no: 2, name: "two")
    ar.append(t1)

    print("ref array: [(ar[0]), (ar[1])]")

    // 参照型なので、データの変更で参照先の値が変わる
    let t3 = ar[0]
    t3.no = 3
    t3.name = "three"

    print("ref array: [(ar[0]), (ar[1])]")
}

testRefType()

実行結果。

ref array: [no:1 name: one, no:2 name: two]
ref array: [no:3 name: three, no:2 name: two]

値型と参照型について、詳細はこの辺りを参考にしてください。

The Swift Programming Language (Swift 2.1): Classes and Structures
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html

Value and Reference Types – Swift Blog – Apple Developer
https://developer.apple.com/swift/blog/?id=10

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *