【发布时间】:2022-11-18 11:17:19
【问题描述】:
我想检测用户是否启用了降低透明度。很简单,您只需调用 func UIAccessibilityIsReduceMotionEnabled(),它就会返回 Bool。但是我的应用程序针对 iOS 7 和 8,并且此功能在 iOS 7 上不可用。
在 Objective-C 中,这是我检查该函数是否存在的方式:
if (UIAccessibilityIsReduceMotionEnabled != NULL) { }
在 Swift 中,我不知道如何检查它是否存在。根据this answer,您可以简单地使用可选链接,如果它是nil,那么它就不存在,但这显然仅限于 Obj-C 协议。 Xcode 6.1 不喜欢这样:
let reduceMotionDetectionIsAvailable = UIAccessibilityIsReduceMotionEnabled?()
它要你删除?。当然,如果您这样做,它会在 iOS 7 上崩溃,因为该功能不存在。
检查这些类型的功能是否存在的正确方法是什么?
【问题讨论】:
-
函数表达式后的括号调用函数。如果你离开它们会发生什么?
-
如果你离开 () 它说同样的事情 - 删除?:
Operand of postfix '?' should have optional type; type is '() -> Bool'。另外,如果你移动?在 () 之后,都是相同的错误信息。 -
我怀疑它确实还不可用。据我了解,可选链接用于类变量。
UIAccessibilityIsReduceMotionEnabled更像是静态函数 -
如果将函数分配给具有可选闭包类型的变量会发生什么?
let reduceMotionDetectionIsAvailable : (() -> Bool)? = UIAccessibilityIsReduceMotionEnabled
标签: ios swift uiaccessibility