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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:35:19