我目前的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')
答案 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()
....
}