You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:28:33