gpt4 book ai didi

ios - 将依赖注入(inject)与 iOS 框架类的协议(protocol)结合使用

转载 作者:行者123 更新时间:2023-11-29 02:29:01 25 4
gpt4 key购买 nike

这是我的课的开始:

class RoomMonitor: NSObject {

private var locationManager: CLLocationManager
private var building: BuildingProtocol
private var beacons: BeaconsProtocol

init (thisBuilding:BuildingProtocol, thisLocationManager:CLLocationManager, theseBeacons:BeaconsProtocol) {
building = thisBuilding
locationManager = thisLocationManager
beacons = theseBeacons

我想为第二个参数类型使用协议(protocol)而不是 CLLocationManager。我已经尝试为我需要的位声明一个协议(protocol):

protocol LocationManagerProtocol {
func respondsToSelector(selector:Selector) -> Bool
func requestAlwaysAuthorization()
func startMonitoringForRegion(region:CLBeaconRegion)
func startRangingBeaconsInRegion(region:CLBeaconRegion)
func startUpdatingLocation()
var delegate: CLLocationManagerDelegate { set get }
}

并使用 thisLocationManager:LocationManagerProtocol 作为参数声明,但它表示 CLLocationManager 不符合 LocationManagerProtocol。我也试过使用扩展来添加协议(protocol),但它说这些方法是公共(public)的,我不允许在协议(protocol)中使用公共(public)。

对于如何实现我想要的任何建议,我将不胜感激。

最佳答案

好的,现在我明白了访问控制(不确定它是什么时候添加到 Swift 的,但我在 Xcode 7 beta 3 中使用 Swift 2 beta)我所要做的就是在“协议(protocol)”之前插入“public”。默认值为“内部协议(protocol)”,您不能在内部协议(protocol)中包含公共(public)项目。

.. 并使用了扩展名

extension CLLocationManager:LocationManagerProtocol { }

我从协议(protocol)中删除了委托(delegate),因为这是一个单独的问题

关于ios - 将依赖注入(inject)与 iOS 框架类的协议(protocol)结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27145233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com