#available
在区分 watchOS 和 iOS 时似乎无法正常工作。
以下是在 iOS 和 watchOS 之间共享的代码示例:
lazy var session: WCSession = {
let session = WCSession.defaultSession()
session.delegate = self
return session
}()
...
if #available(iOS 9.0, *) {
guard session.paired else { throw WatchBridgeError.NotPaired } // paired is not available
guard session.watchAppInstalled else { throw WatchBridgeError.NoWatchApp } // watchAppInstalled is not available
}
guard session.reachable else { throw WatchBridgeError.NoConnection }
看起来它只默认为WatchOS,并且编译器不考虑#available
。
我是不是在错误地使用这个API,或者还有其他区分iOS和WatchOS的方法吗?
更新:正如BPCorp所提到的,似乎我误用了API
使用Tali的解决方案可以解决上述代码:
#if os(iOS)
guard session.paired else { throw WatchBridgeError.NotPaired }
guard session.watchAppInstalled else { throw WatchBridgeError.NoWatchApp }
#endif
guard session.reachable else { throw WatchBridgeError.NoConnection }
很遗憾,在Xcode 7 GM版本中没有#if os(watchOS)
..
编辑:不确定是何时添加的,但你现在可以在Xcode 7.2中使用#if os(watchOS)