如何在Xcode 14与15中编写无警告的iOS专属Swift代码(避免重复)
跨Xcode版本编写仅iOS Swift代码块的无警告优化方案
核心问题
Xcode 14(对应Swift 5.8及以下)里,os(visionOS)属于未识别的平台标识,直接写os(iOS) && !os(visionOS)会弹出编译警告;但到了Xcode 15(Swift 5.9+),os(iOS)会在visionOS环境里判定为true,必须加上!os(visionOS)才能确保代码只在iOS上跑。
最优无重复代码方案
把仅iOS的业务逻辑单独封装成一个函数,之后用编译条件控制函数调用就行——核心代码只写一次,完全避免重复:
// 仅iOS的业务逻辑,只实现一次 private func runOnlyiOSCode() { // 这里写你的仅iOS代码 print("Running iOS-specific logic") } // 跨版本兼容的调用逻辑 #if os(iOS) #if swift(>=5.9) #if !os(visionOS) runOnlyiOSCode() #endif #else runOnlyiOSCode() #endif #endif
另一种极简写法(无需函数封装)
如果不想额外封装函数,也可以用嵌套编译条件让Xcode 14碰不到未识别的os(visionOS)标识,同时保证无警告:
#if os(iOS) #if swift(>=5.9) #if !os(visionOS) // 你的仅iOS代码块 #endif #else // 你的仅iOS代码块 #endif #endif
如果代码逻辑较短,这种写法可以接受;但逻辑复杂时,优先选择函数封装的方案。
内容的提问来源于stack exchange,提问作者Paul Beusterien
相关产品推荐
相关产品推荐

