迅捷的关键价值 - 需要建议

时间:2015-06-02 11:25:28

标签: ios swift

我有一个类,它获取用户当前位置,然后GEOCODE到一个正确的位置。然后我想将更改发送到视图控制器。我希望能够获得observeValueForKeyPath函数的地理位置。然后我想把这个函数放在ViewController中,所以当它改变时我想要一个标签来改变。

int? i = 1;
int j = (i ?? 2) + 1;  //If I is null make j = 2 else make j = to 0 and then add 1 

1 个答案:

答案 0 :(得分:0)

首先,在属性所在的任何类中将LocationString声明为动态。这将为该属性启用KVO。

dynamic var LocationString: String = ""

在视图控制器的viewDidLoad()中设置KVO。请记住在代码中的某处删除KVO。由于LocationString是另一个类的属性,因此获取对该类的引用。您可以在viewDidLoad()中初始化对象,或者将其设为单例并以此方式获取实例。我将使用单例实例,我将为此段代码调用Location

override func viewDidLoad() {
    super.viewDidLoad()
    let location = Location.sharedInstance()
    location.addObserver(self, forKeyPath: "LocationString", options: .allZeros, context: nil)
}

现在,在您的视图控制器中,observerValueForKeyPath(...)单身人士会随时更改LocationString来调用Location

override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
    let location = Location.sharedInstance()
    self.label.text = location.LocationString
}