在SwiftUI (Mac Catalyst)项目中有条件地包含仅macos的代码?



我正在编写一个在iOS和macOS上运行的应用程序,使用Mac Catalyst和Swift。

我想设置一个属性,只有在macOS上可用,但我找不到一种方法使用#available@available来防止编译器在iOS构建中包括这行代码:

这个语法不能工作,因为后面的强制性*包含所有iOS版本。

if #available(macCatalyst 13.0, *) {
view.showsZoomControls = true
}

我尝试使用iOS 999添加一个无意义的iOS版本,但这也不起作用,因为该属性在iOS中被标记为严格不可用。

使用@available有一个使用introduced:的长语法,允许指定每个操作系统版本,并且需要每个操作系统单独的@available条目,但我看不到任何方法使用它。似乎你不能在代码块上使用@available

真的没有相同的方法来做这件事吗?

作为参考,这个特定属性的定义是:

@property (nonatomic) BOOL showsZoomControls
API_AVAILABLE(macos(10.9), macCatalyst(13.0)) 
API_UNAVAILABLE(ios, watchos, tvos);

危机避免了——看来available是错误的锤子。

现在对我有用的是更简单的方法:

#if os(macOS)
view.showsZoomControls = true
#endif

您可以使用目标环境识别/限制Mac Catalyst

#if targetEnvironment(macCatalyst)
view.showsZoomControls = true
#endif

最新更新