我正在编写一个在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