Как пометить объявление Swift как доступное в iOS и недоступное в macOS - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть класс, который работает только на iOS 10.0 и выше.Он находится в пакете Swift, поэтому Xcode 11 пытается скомпилировать его и для macOS, и жалуется.Как мне сказать, что он доступен только на iOS 10.0.

Они не работают:

@available(iOS 10.0, *)
class Thing { ... }

@available(macOS, unavailable)
@available(iOS 10.0, *)
class Thing { ... }

Некоторые документы: https://docs.swift.org/swift-book/ReferenceManual/Attributes.html

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

Из документов

iOS iOSApplicationExtension macOS macOSApplicationExtension watchOS watchOSApplicationExtension tvOS tvOSApplicationExtension swift Вы также можете использовать звездочку (*), чтобы указать наличие объявления для всех названий платформ, перечисленных выше.

Итак * в @available (iOS 10.0, *) говорят, что объявление доступно на всех других платформах.Но мы также указываем, что он недоступен в macOS.Таким образом, в конце концов компилятор запутывается, и доступность выигрывает войну.Вместо использования @available вы можете использовать флаги компилятора,

#if os(iOS)
#endif

, чтобы указать компилятор для компиляции кода только на iOS.

1 голос
/ 19 сентября 2019

Оберните его внутри этого

#if canImport(UIKit)
    // iOS Only code
#endif

Таким образом, он будет удален из скомпилированного проекта, если он не будет работать на устройстве iOS.

Вы также можете проверить с типом ОС, например #if os(iOS),но будьте конкретны, почему вы должны заботиться об ОС?не из-за чего-то особенного для iOS, как UIKit?Если нет, будьте более общими и ограничьте OS, как упомянуто @Shreeram.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...