如何快速在单例中使用此代码?
Posted
技术标签:
【中文标题】如何快速在单例中使用此代码?【英文标题】:How do I use this code in a singleton in swift? 【发布时间】:2016-11-15 17:27:48 【问题描述】:我有我在这里找到的这段代码。现在我想知道如何在单例中使用它。我的理解是,如果我在单例中使用此代码,我会注意到网络状态是否发生变化。
func startNetworkReachabilityObserver()
let reachabilityManager = Alamofire.NetworkReachabilityManager(host: "www.google.com")
reachabilityManager?.listener = status in
switch status
case .NotReachable:
print("The network is not reachable")
case .Unknown :
print("It is unknown whether the network is reachable")
case .Reachable(.EthernetOrWiFi):
print("The network is reachable over the WiFi connection")
case .Reachable(.WWAN):
print("The network is reachable over the WWAN connection")
// start listening
reachabilityManager?.startListening()
【问题讨论】:
您可以简单地将其设为类方法并按原样使用它。我猜不需要使用单例。只要应用程序启动就调用这个函数。 在单例中使用它与在其他类中使用它没有区别,单例中没有魔法意味着它必须进入单例,只要该类的生命周期与您一样长,任何类都可以需要更改通知。 如果我创建一个类方法,我不会收到任何网络状态更改的通知。我会单身。 【参考方案1】:只要您保留对reachabilityManager 的引用,使用单例就可以工作
class NetworkStatus
static let sharedInstance = NetworkStatus()
private init()
let reachabilityManager = Alamofire.NetworkReachabilityManager(host: "www.apple.com")
func startNetworkReachabilityObserver()
reachabilityManager?.listener = status in
switch status
case .notReachable:
print("The network is not reachable")
case .unknown :
print("It is unknown whether the network is reachable")
case .reachable(.ethernetOrWiFi):
print("The network is reachable over the WiFi connection")
case .reachable(.wwan):
print("The network is reachable over the WWAN connection")
reachabilityManager?.startListening()
所以你可以这样使用它:
let networkStatus = NetworkStatus.sharedInstance
override func awakeFromNib()
super.awakeFromNib()
networkStatus.startNetworkReachabilityObserver()
如果您的网络状态发生任何变化,您都会收到通知。
【讨论】:
【参考方案2】:将变量作为属性提升到类中。添加静态共享属性以使您的类成为单例。
class ReachabilityManager
private let networkReachabilityManager = NetworkReachabilityManager()
static let shared = ReachabilityManager()
private override init ()
super.init()
networkReachabilityManager?.listener = status in
//Post Notifications here
func startListening()
networkReachabilityManager.startListening()
静态属性默认是惰性的,因此当您调用 ReachabilityManager.shared.startListening() 时,它将在第一次实例化单例,后续调用使用现有的共享实例。
【讨论】:
请init
private
确保我们不能实例化多个单例对象。以上是关于如何快速在单例中使用此代码?的主要内容,如果未能解决你的问题,请参考以下文章