#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)
.. от Xcode 7 GM
Изменить: не уверен, когда он был добавлен, но теперь вы можете сделать #if os(watchOS)
в Xcode 7.2