2016-09-27 21 views
-2

我如何使用一个变量didSet财产以外的方法我如何使用`从方法之外didSet`属性变量

这项工作的

override func viewWillAppear(_ animated: Bool) { 
    var myString = "sadf" { 
     didSet{ 
      print("myString did change from "+oldValue+" to "+myString) 
     } 
    } 
} 

但我要做到这一点

//add var outside of method 
var myString:String! 

override func viewWillAppear(_ animated: Bool) { 
    //call variable inside of method 
    myString = "sadf" { 
     didSet{ 
      print("myString did change from "+oldValue+" to "+myString) 
     } 
    } 
} 
+2

你“想做到这一点“对我来说毫无意义。请解释你想要发生的事情。如果你只是想在'viewWillAppear'中打印一些东西,然后调用'print'。 –

+2

你到底在做什么? – milesper

+0

我试图从'funcs'监视'viewWillAppear'中变量的变化。可以说'func1'改变了'var'我想知道在'func2'中唯一的方法就是我知道这是'var'不在'viewWillAppear'里面# – pprevalon

回答

2

你可以为方法外的属性定义didSet。这应该工作:

var myString:String = "oldString" { 
    didSet(oldValue) { 
     print("myString did change from "+oldValue+" to "+myString) 
    } 
} 

override func viewWillAppear(_ animated: Bool) { 
    myString = "sadf" 
    myString = "secondCall" 
} 

输出将是这个样子:

myString did change from to sadf 
myString did change from sadf to secondCall 

欲了解更多信息,请阅读有关财产观察员章苹果文档中:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html

0

只需将整个didSet结构陪定义为全局myString,因为你拥有它。没有法律说didSet只适用于一个财产;它可以应用于全局变量,甚至可以应用于局部变量(尽管谁知道为什么要这么做)!这是完全合法的:

var myString : String! { 
    didSet { 
     print("myString changed") 
    } 
} 
override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    myString = "asdf" 
} 
+0

@Hamish如果你知道OP在说什么你比我做得更好。 – matt

+0

@matt你的回答是正确的,那正是我想要实现的。还有另一位用户在你面前提供了相同的答案。谢谢 – pprevalon

+0

@pprevalon没问题。 – matt

0

你可以做的是,声明另一个lazy var持有任你挑选旧/新值,并将其赋值在viewWillAppear方法象下面这样:

lazy var changedString = String() 
var myString = "sadf" { 
    didSet { 
     print("myString did change from "+oldValue+" to "+myString) 
     changedString = myString 
    } 
} 
override func viewWillAppear(_ animated: Bool) { 
    myString = "this got changed" 
} 
相关问题