我想在我的一个代理类中管理所有位置代码。因为这个类是从头开始构建的,并且不是在继承NSObjectProtocol的UIView或类似类上构建的,所以当我尝试添加NSObjectProtocol时,它会抛出错误“不符合协议CLLocationManagerDelegate”。
class GeoProxy : Proxy, CLLocationManagerDelegate
{
var locationManager = CLLocationManager()
override class var NAME: String { return "GeoProxy" }
}你知道如何在不添加所有NSObjectProtocol函数的情况下让类保持一致吗?
发布于 2015-12-14 20:47:27
更简单的方法是让Proxy类继承NSObject
class Proxy: NSObject {
}然后,所有子类都将符合NSObjectProtocol。此外,这些类将与Objective-C代码兼容。
发布于 2016-03-27 23:25:43
最好将与CLLocationManagerDelegate相关的代码放在viewComponent (UIViewController)中并从那里处理事情,因为UIViewController已经从NSObject继承,所以不需要更改PureMVC的核心角色(在本例中是Notifier)。
另一个选项是创建一个独立的类来管理与位置相关的活动,例如,实例化一个中介LocationMediator,将class Location: NSObject, CLLocationManagerDelegate实例化为它的viewComponent,并通过ILocation协议将其自身设置为一个委托。
LocationMediator将通过ILocation委托侦听来自它的viewComponent的任何事件,然后它将发送一个通知,供其他感兴趣的参与者响应。
与硬件相关的活动属于查看
任何与硬件相关的活动,例如相机、GPS、加速计、陀螺仪和浏览器中的路由器等非硬件元素,通常都会生成事件,并且属于MVC范例的视图层,应该在视图组件中进行处理。如果需要与系统的其他部分通信,则viewComponents中的任何触发事件都将由它的中介器处理。Proxy最适合web服务或持久性。
https://stackoverflow.com/questions/34267396
复制相似问题