2017-03-14 8 views
0

スウィフトdeinitializerは、それが値を更新し、95理解スウィフトDeinitializers

struct mainTotal{ 
    static var valueone :Int = 0 
    static var valuetwo :Int = 0 
    static var sum :Int { 
     get { 
      return valueone + valuetwo 
     } 
    } 
} 

class Total{ 
    var valueone :Int = 10 
    var valuetwo :Int = 10 
    var sum :Int { 
     get { 
      return valueone + valuetwo 
     } 
    } 
    func printsum(valueone:Int,valuetwo:Int){ 
     self.valueone += valueone 
     self.valuetwo += valuetwo 
    } 
    deinit { 
     mainTotal.valueone += valueone 
     mainTotal.valuetwo += valuetwo 

    } 
} 

var total = Total() 
total.printsum(valueone: 10,valuetwo: 15) 
var total1 = Total() 
total1.printsum(valueone: 10,valuetwo: 20) 
print(mainTotal.sum) 
print(total.sum) 
+0

あなた '' total' total'がmainTotal.sum' '後に参照されている'のでdeinit'は、あなたが 'mainTotal.sum'をチェックした後に呼び出されます。 – Alexander

+0

なぜあなたの印刷文の前に 'deinit'が呼び出されると思いますか? – rmaddy

答えて

0

deinitとして答えを印刷する必要があり、私はmainTotal.sumを印刷していたとき、私は答えとしてゼロを取得しています、valueoneとvaluetwoを更新していませんTotalが呼び出されていないため、mainTotalの値は更新されません。

deinitTotalと呼び出すには、totalオブジェクトを手動で割り当て解除する必要があります。

これを試してみてください:

var total : Total? = Total() 
total?.printsum(valueone: 10,valuetwo: 15) 
print(total!.sum) 
total = nil 
print(mainTotal.sum) 
関連する問題