locationManager didUpdateLocation,在另一个 class swift 上更改 UIElements

locationManager didUpdateLocation, change UIElements on another class swift

所以我在我的应用程序中实现了定位。

我创建了一个 class 来处理位置信息,我正在使用 locationManager didUpdateLocations 来了解何时找到位置。 我需要完成的是更改按钮上的图像并停止另一个 class(viewController).

中的 activityIndi​​cator

我试图获取 viewController 的实例以在我的 locationClass 中使用,但失败并返回了 nil。

有没有人有好的方法来实现这个? 我想我需要获得我的 viewController 的一个实例,但我没有这样做。顺便说一句,位置信息正在运行!

编辑: 感谢 naomimichiko 我设法做到了。我添加了一个解释如何操作的答案。

听起来您可能想编写自己的协议,在 didUpdateLocations 中触发方法调用,让您的其他 class 知道。

你可以想到delegateNSNotification在位置更新时通知其他人。

感谢 naomimichiko,我制定了一个协议来处理我所需要的! 这是我的做法:

我首先创建了一个名为:'protocols.swift' 的文件。在此我声明了我的协议:

@objc protocol LocDelegate{
optional func locationFound()
}

在位置 class 处理我添加的位置内容:

var delegateLoc: LocDelegate?

我有 func locationManager didUpdateLocaton 在位置 class 并且我在那里做了这个:

delegateLoc?.locationFound!()

如果有 class 侦听此功能,则此功能将 "run" 该功能。

在我的 viewController 中,我需要更新标签和狗屎,我将协议添加到 class 中,如下所示:

class ViewController: UIViewController, LocDelegate

然后在 viewDidLoad 中我将委托设置为 self。

let locatonClass = locationClass()
locatonClass.delegateLoc = self

剩下的只是添加协议需要的功能:

func locationFound() {
    self.hereIAm.setImage(UIImage(named: "loc1.png"), forState: .Normal)
    self.activityIndicator1.stopAnimating()
}

就是这样...这真的很简单,但很难弄清楚如何完成它。 在此处阅读有关自定义协议的更多信息:Custom Protocols