在支持 iOS 8.0 的 iOS 应用程序中实现 WatchConnectivity
Implement WatchConnectivity in an iOS App that supports iOS 8.0
我当前的 iOS 应用程序支持 iOS 8 及更高版本。我决定实施一个 Watch 应用程序,我希望 watch 和 iOS 应用程序通过 WatchConnectivity 进行通信。假设我想构建一个 class 来处理连接,而这个 class 是一个 WCSessionDelegate
。为了能够在我的项目中包含 class,我必须将它包装到 @available(iOS 9.0,0)
标记中,这没关系......但是,我如何跟踪这个 [=29= 的实例] 在 AppDelegate 中(或在任何其他 class 中)???
我不能写类似
的东西
class AppDelegate: UIResponder, UIApplicationDelegate {
@available(iOS 9.0,0)
var connectivityHandler: ConnectivityHandler?
如何在应该也支持 iOS 8 的项目中使用这些 class?!
编辑----
我找到了这个解决方案,但它听起来并不真实 "good"。我创建了一个动态 属性 并依赖于当前系统我 return 一个实例或只是零... 属性 显然应该是 AnyObject
类型才能成为有效的 iOS8个参数...
var _connectivityHandler: AnyObject?
var connectivityHandler: AnyObject? {
get {
if _connectivityHandler != nil {
return _connectivityHandler
}else{
if #available(iOS 9.0, *) {
_connectivityHandler = ConnectivityHandler()
} else {
_connectivityHandler = nil
}
return _connectivityHandler
}
}
set(value) {
_connectivityHandler = value
}
}
您可以将 connectivityHandler 中的所有 WatchConnectivity 函数移动到 class 的扩展,并用 @availability API:
屏蔽它
import UIKit
import WatchConnectivity
class ConnectivityHandler: NSObject {
}
@available(iOS 9.0, *)
extension ConnectivityHandler: WCSessionDelegate {
func initSession() {
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
}
如果这样做,您可以将此 class 添加到您的 AppDelegate 中,它也会在 iOS 8:
中编译
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
let connectivityHandler = ConnectivityHandler()
....
}
我当前的 iOS 应用程序支持 iOS 8 及更高版本。我决定实施一个 Watch 应用程序,我希望 watch 和 iOS 应用程序通过 WatchConnectivity 进行通信。假设我想构建一个 class 来处理连接,而这个 class 是一个 WCSessionDelegate
。为了能够在我的项目中包含 class,我必须将它包装到 @available(iOS 9.0,0)
标记中,这没关系......但是,我如何跟踪这个 [=29= 的实例] 在 AppDelegate 中(或在任何其他 class 中)???
我不能写类似
class AppDelegate: UIResponder, UIApplicationDelegate {
@available(iOS 9.0,0)
var connectivityHandler: ConnectivityHandler?
如何在应该也支持 iOS 8 的项目中使用这些 class?!
编辑----
我找到了这个解决方案,但它听起来并不真实 "good"。我创建了一个动态 属性 并依赖于当前系统我 return 一个实例或只是零... 属性 显然应该是 AnyObject
类型才能成为有效的 iOS8个参数...
var _connectivityHandler: AnyObject?
var connectivityHandler: AnyObject? {
get {
if _connectivityHandler != nil {
return _connectivityHandler
}else{
if #available(iOS 9.0, *) {
_connectivityHandler = ConnectivityHandler()
} else {
_connectivityHandler = nil
}
return _connectivityHandler
}
}
set(value) {
_connectivityHandler = value
}
}
您可以将 connectivityHandler 中的所有 WatchConnectivity 函数移动到 class 的扩展,并用 @availability API:
屏蔽它import UIKit
import WatchConnectivity
class ConnectivityHandler: NSObject {
}
@available(iOS 9.0, *)
extension ConnectivityHandler: WCSessionDelegate {
func initSession() {
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
}
如果这样做,您可以将此 class 添加到您的 AppDelegate 中,它也会在 iOS 8:
中编译@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
let connectivityHandler = ConnectivityHandler()
....
}