从Swift调用Objective-C -> 无法在作用域中找到类型“AppDelegate”

14 浏览
0 Comments

从Swift调用Objective-C -> 无法在作用域中找到类型“AppDelegate”

我已经阅读了这个问题,我相信我的问题是不同的。

我有一个Swift类SwiftUtils.swift,它已经在我的项目中调用objective c代码,我也有一些objective c代码回调Swift。

所以我的桥接头文件已经正常工作。

我的问题是,我正在Swift中构建一个系统菜单,并尝试像这样调用我的AppDelegate中的方法:

@objc func createMenuItem() {
    let appDelegate = NSApplication.shared.delegate as? AppDelegate
    let status = NSMenuItem(title: "System Status",
                            action: #selector(appDelegate.showSystemStatus(_:)),
                            keyEquivalent: "s")
    status.target=appDelegate.self
    statusItem.menu?.insertItem(status, at: 0)
}

我无法让编译器解析AppDelegate在函数的第一行。

Xcode一直告诉我“无法在范围内找到类型\'AppDelegate\'”

\"enter

我的桥接头文件:

#ifndef Foo_Bridging_Header_h
#define Foo_Bridging_Header_h
#import <Foundation/Foundation.h>
#import "uiframework/Utils.h"
#import "AppDelegate.h"
#endif /* Foo_Bridging_Header_h */

我的AppDelegate.h:

#import <Cocoa/Cocoa.h>
#import "Foo-Swift.h"
@interface AppDelegate : NSObject 
@property SwiftUtils *utils;
- (void) checkForUpdates;
+ (void) showSystemStatus;
@end

admin 更改状态以发布 2023年5月25日
0
0 Comments

据我的理解,showSystemStatus方法是一个类方法(例如static方法),而你正在试图从实例中调用这个方法。这可能是你遇到问题的根本原因。

以下示例应该适合你:

let status = NSMenuItem(title: "System Status",
                action: #selector(AppDelegate.showSystemStatus),
                keyEquivalent: "s")

为了防止循环,你可以将你的实现移到另一个类中并尝试一下。

0