在支持iOS 8.0的iOS应用程序中实现WatchConnectivity

时间:2015-10-30 14:31:03

标签: swift apple-watch

我目前的iOS App支持iOS 8及更高版本。我决定实施一个Watch App,我希望通过WatchConnectivity让手表和iOS应用程序通信。假设我想构建一个类来处理连接,这个类是@available(iOS 9.0,0)。为了能够在我的项目中包含该类,我将它包装到class AppDelegate: UIResponder, UIApplicationDelegate { @available(iOS 9.0,0) var connectivityHandler: ConnectivityHandler? 标签中,这没关系......但是,如何在AppDelegate中(或任何一个)跟踪此类的实例其他类)??? 我不能写像

这样的东西
AnyObject

如何在一个应该支持iOS 8的项目中使用这些类?

编辑---- 我找到了这个解决方案,但听起来并不是真的“好”。我创建一个动态属性,并依赖于当前系统我返回一个实例或只是nil ...该属性显然应该是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 } } 类型的有效iOS8参数...

 % find all scope blocks as MATLAB figures:
set(0, 'showhiddenhandles', 'on')
scope = findobj(0, 'Tag', 'SIMULINK_SIMSCOPE_FIGURE');
for i=1:length(scope)
  % this is the callback of the "autoscale" button:
  simscope('ScopeBar', 'ActionIcon', 'Find', scope(i))
end
set(0, 'showhiddenhandles', 'off')

1 个答案:

答案 0 :(得分:4)

您可以将connectivityHandler中的所有WatchConnectivity函数移动到该类的扩展名,并使用@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()
        }
    }
}

如果您这样做,可以将此类添加到AppDelegate,它也可以在iOS 8中编译:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    let connectivityHandler = ConnectivityHandler()
    ....
}