chi*_*arm 17 ios uilocalnotification swift
我有一个使用本地通知并支持iOS 10的应用程序.我正在尝试添加iOS 9支持,这需要我使用旧的位置通知API.我试图在我的iOS 10代码上使用@available和#available,我无法弄清楚如何将我的中心变量仅用于运行iOS 10的设备.
当我将目标从iOS 10设置为9时,我收到此变量的错误消息:"UNUserNotificationCenter仅适用于iOS 10.0或更高版本." 它建议我将"@available(iOS 10.0,*)"添加到我的整个班级,我不想这样做,因为这个类中的代码将用于iOS 9.我很感激有关如何限制我的任何建议中心属性到iOS 10.
class ViewController: UIViewController, UITextFieldDelegate {
let center = UNUserNotificationCenter.current()
...
Run Code Online (Sandbox Code Playgroud)
mir*_*cal 43
我在 XCode 14 的 Flutter 项目中遇到此错误。外部包之一正在使用:
@available(iOS 14.0, *)
Run Code Online (Sandbox Code Playgroud)
我当前的修复是:
更新 Podfile 中的版本
platform :ios, '14.0'
重置 Pod
cd ios && rm -rf Pods/ Podfile.lock && pod install --repo-update
问题: https: //github.com/pichillilorenzo/flutter_inappwebview/issues/1216
kga*_*dis 24
以下是一个潜在的解决方案(感谢博客文章).
我们的想法是使用类型为的存储属性,Any然后创建一个计算属性,该属性将转换存储的属性(并在必要时实例化它).
private var _selectionFeedbackGenerator: Any? = nil
@available(iOS 10.0, *)
fileprivate var selectionFeedbackGenerator: UISelectionFeedbackGenerator {
if _selectionFeedbackGenerator == nil {
_selectionFeedbackGenerator = UISelectionFeedbackGenerator()
}
return _selectionFeedbackGenerator as! UISelectionFeedbackGenerator
}
Run Code Online (Sandbox Code Playgroud)
Jay*_*son 14
我知道这是一个比较老的问题,但是我想为像我一样通过Google来到这里的人们添加一个答案。
正如kgaidis和Cœur所述,您可以@available在计算属性上使用。但是,lazy变量被视为计算属性,因此您也可以使用@available它们。这具有删除多余的存储属性和强制强制转换的样板的好处,实际上,在iOS 10之前的代码中没有留下该属性的证据。
您可以像这样简单地声明它:
@available(iOS 10.0, *)
lazy private(set) var center = UNUserNotificationCenter.current()
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有办法使它完全是只读的,但是private(set)至少在类之外使它成为只读的。
@available 可以用于整个类或一个或多个函数,但不能用于属性。
关于您的 UNUserNotificationCenter 用法,current返回一个永远不会改变的单例,那么为什么不删除center常量,而只使用UNUserNotificationCenter.current()where centeris used?