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


お世話になります。

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

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

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

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




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

Xcode 7.1.1のPlaygroundで確認。

[code]

    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()
    
[/code]

実行結果。

[code]

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

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

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>




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

Xcode 7.1.1のPlaygroundで確認。

[code]

    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()
    
[/code]

実行結果。

[code]

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

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

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>

