u16suzuの blog

日々学んだことのメモブログです。

swiftのディープコピー

swift はデフォルトで deep copyになる。 また、引数で受け取ったオブジェクトはletになってて直接加工できない。 そのため、ディープコピーを作ってそれを編集する必要がある。

// swift はデフォルトで deep copyになる
let ar = [1,2,3,4]

var ar2 = ar

ar2.insert(99, atIndex: 1)

print( ar, ar2)
// => [1, 2, 3, 4] [1, 99, 2, 3, 4]



// swiftでは引数で受け取ったオブジェクトを加工できない
func myInsert( ar:Array<Int> ) -> Array<Int>{
    var a = ar // いったんディープコピーする必要がある
    a.insert(55, atIndex: 1)
    return a
}


// let ar3 = [6,7,8,9]
var ar3 = [6,7,8,9]

print( myInsert(ar3) )
// => [6, 55, 7, 8, 9]
print(ar3)
// => [6, 7, 8, 9]

swiftでKVO

  1. 監視対象のプロパティに dynamic 修飾子をつける
  2. Observer は NSObject を継承している必要がある
dynamic var fbNativeAd:FBNativeAd?        

addObserver(self, forKeyPath: "fbNativeAd", options: [.New, .Old], context: nil)
  
deinit {
     removeObserver(self, forKeyPath: "fbNativeAd")
 }
    
override internal func observeValueForKeyPath(
    keyPath: String?,
    ofObject object: AnyObject?,
    change: [String : AnyObject]?,
    context: UnsafeMutablePointer<Void>)
    {
        print("hoge-----")
        if( keyPath=="fbNativeAd"){
        }
}