Cez*_*zar 33 ios watchos swift2 watchos-2
#available 在区分watchOS和iOS时似乎不起作用.
以下是iOS和watchOS之间共享的代码示例:
lazy var session: WCSession = {
let session = WCSession.defaultSession()
session.delegate = self
return session
}()
Run Code Online (Sandbox Code Playgroud)
...
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 }
Run Code Online (Sandbox Code Playgroud)
似乎它只是默认为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 }
Run Code Online (Sandbox Code Playgroud)
不幸的是#if os(watchOS),从Xcode 7 GM开始
编辑:不确定何时添加,但您现在可以#if os(watchOS)在Xcode 7.2上执行
Tal*_*ali 25
如果您只想在iOS上执行该代码,请使用#if os(iOS)而不是if #available(iOS ...).
这样,您不会对操作系统的版本使用动态检查,而是为一个操作系统或另一个操作系统编译不同的代码.
在Apple开发指南中,据说明星*(这是必需的)意味着它将执行if未指定但在目标指定的最小部署目标中列出的操作系统的主体.
因此,如果您的目标指定iOS 和 watchOS,则您的语句if #available(iOS 9.0, *)意味着该if主体可用于iOS 9及更高版本以及任何watchOS版本.
另外,如果您想使用本Apple指南中 "构建配置"一章中描述的内容,请务必小心.它用于根据操作系统有条件地编译代码.这在运行时不是动态的.
| 归档时间: |
|
| 查看次数: |
3281 次 |
| 最近记录: |