Swift报错:NotificationCenter无default成员,同Xcode版本项目表现异常
排查Type 'NotificationCenter' has no member 'default'报错问题
我编写了一个用于获取键盘高度和动画时长的Observable Object类KeyboardController,该代码在旧项目和新建Xcode项目中运行正常,但在同一Xcode版本的另一个项目中出现报错:Type 'NotificationCenter' has no member 'default',请求协助排查原因。
代码如下:
import Foundation import SwiftUI import Combine class KeyboardController: ObservableObject { @Published var keyboardHeight: CGFloat = 0 @Published var height: CGFloat = 0 @Published var duration: CGFloat = 0 init() { self.listenForKeyboardNotifications() } private func listenForKeyboardNotifications() { NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillShowNotification, object: nil, queue: .main) { (notification) in guard let userInfo = notification.userInfo, let keyboardRect = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect, let duration = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? CGFloat else { return } self.duration = duration self.height = keyboardRect.height withAnimation(.spring(response: duration, dampingFraction: 1, blendDuration: 0)){ self.keyboardHeight = keyboardRect.height } } NotificationCenter.default.addObserver( forName: UIResponder.keyboardWillHideNotification, object: nil, queue: .main ) { (notification) in guard let userInfo = notification.userInfo, let duration = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? CGFloat else { return } self.duration = duration withAnimation(.spring(response: duration, dampingFraction: 1, blendDuration: 0)){ self.keyboardHeight = 0 } } } }
排查步骤
- 检查项目内是否存在自定义
NotificationCenter类型:全局搜索项目中的NotificationCenter,确认是否有非Foundation框架下的同名类/结构体,这类自定义类型会覆盖系统的NotificationCenter,导致无法识别default成员。 - 验证Foundation框架的引入状态:尽管代码中已经
import Foundation,但仍需确认项目的Build Phases -> Link Binary With Libraries中是否包含Foundation框架,也可以尝试在报错文件中重新添加import Foundation语句后重新编译。 - 对比项目Swift版本:同一Xcode版本支持多Swift版本,检查报错项目与正常项目的
Build Settings -> Swift Language Version是否一致,排除版本差异导致的语法兼容问题。 - 清理Xcode缓存:执行
Cmd+Shift+K清理Build文件夹,再执行Cmd+Option+Shift+K清理Derived Data,之后重新编译项目,排除缓存引发的异常。 - 排查第三方库冲突:检查项目引入的第三方库是否存在同名的
NotificationCenter定义,查看库的源码或文档确认命名冲突情况。 - 检查Target编译设置:查看项目Target的
Build Settings,重点确认SWIFT_INCLUDE_PATHS等路径相关设置是否异常,避免系统框架的查找路径被错误修改。
内容的提问来源于stack exchange,提问作者Kerem Cesme
相关产品推荐
相关产品推荐

