2017-03-14 6 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)