在Swift中检测可用的API iOS和watchOS

#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之间的代码

更新:似乎我是滥用API,如BPCorp所述

使用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 }

不幸的是没有#if os(watchOS).. as of Xcode 7 GM

编辑:不知道什么时候添加,但你现在可以做#if os(watchOS)在Xcode 7.2

如果您只想在iOS上执行该代码,请使用#if os(iOS),而不是if #available(iOS …)。

这样,您不是对操作系统的版本使用动态检查,而是为一个操作系统或另一个操作系统编译不同的代码

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...