Swift4开发iPhone本地通知页面遇‘Type of expression is ambiguous’报错求助
解决Swift 4中"Type of expression is ambiguous without more context"本地通知报错
嘿,我来帮你搞定这个Swift 4的本地通知报错问题!这个错误主要是因为你的代码还停留在Swift 3甚至更早的语法上,和Swift 4的API、语法规则不兼容,导致编译器没法准确推断表达式类型。咱们一步步来修正:
问题分析&核心修正点:
- 方法签名不匹配:Swift 4中
application(_:didFinishLaunchingWithOptions:)的参数类型已更新,原来的[NSObject : AnyObject]?要改成[UIApplication.LaunchOptionsKey: Any]?,方法的参数标签规则也有变化。 - API命名简化:
UIApplication.sharedApplication()在Swift 4里已经简化为UIApplication.shared。 - OptionSet语法变化:Swift 4中通知类型的组合不再用按位或
|,而是用数组语法[.alert, .badge]来表示OptionSet集合。 - 过时兼容性判断可移除:
UIApplication.instancesRespond(to:)这个判断在Xcode 9对应的iOS版本里已经不需要了,直接注册通知设置即可。
修正后的完整代码:
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // 注册本地通知权限 let notificationSettings = UIUserNotificationSettings(types: [.alert, .badge], categories: nil) UIApplication.shared.registerUserNotificationSettings(notificationSettings) return true } func application(_ application: UIApplication, didReceive notification: UILocalNotification) { application.applicationIconBadgeNumber = 0 } }
额外小提示:
如果你的App需要适配iOS 10及以上版本,更推荐使用新的UserNotifications框架(UNUserNotificationCenter)来实现本地通知,不过上面的代码已经能完美解决你当前Swift 4 + Xcode 9环境下的报错问题啦。
内容的提问来源于stack exchange,提问作者juee
相关产品推荐
相关产品推荐

