我收到“请求审核”提醒:
SKStoreReviewController.requestReview(in: scene)
问题是它挂起了 iPhone 15.x 模拟器,所以我决定禁用它。
但是还有一个问题——模拟器的禁用是通过宏来实现的:
#if !targetEnvironment(simulator)
...
#endif
并且对特定 iOS 版本的禁用是通过属性
@available
或 #available
实现的。
如何将宏与这些属性结合起来?或者有更方便的方法来实现这一点吗?
我当前的代码是:
#if targetEnvironment(simulator)
if #available(iOS 16, *) {
SKStoreReviewController.requestReview(in: scene)
}
#else
SKStoreReviewController.requestReview(in: scene)
#endif
您始终可以编写自己的全局变量来包装这些“宏”(从技术上讲,它们不是宏)。
var isSimulator: Bool {
#if targetEnvironment(simulator)
true
#else
false
#endif
}
var ios16Available: Bool {
if #available(iOS 16, *) {
true
} else {
false
}
}
那么你可以做
if ios16Available || !isSimulator {
SKStoreReviewController.requestReview(in: scene)
}
如果你可以接受一个空的 if 语句,你可以避免声明
ios16Available
(我觉得这很可怕):
if #unavailable(iOS 16), isSimulator {} else {
SKStoreReviewController.requestReview(in: scene)
}
如果可以立即返回,则
guard
效果完美:
guard #unavailable(iOS 16), isSimulator else {
SKStoreReviewController.requestReview(in: scene)
return
}