在目标C中调用Swift函数



Swift和Objective C非常陌生。我的经理让我把一个过时的应用程序重新发布到应用商店。由于苹果的一些更新,它被删除了,我们的应用程序不符合新的资格。但我在试图编译这个项目时遇到了一些问题。因此,我首先通过在XCode等旧软件上运行更新来更新项目。但现在我陷入了AppDelegate Swift函数在目标C代码中看不到的问题。然而,当我右键单击并转到定义时,找到它们没有问题。这就是一个例子。

目标C

Swift

在代码中,您将实例方法作为类方法进行访问

错误本身说

No known class method for selector 'myBlue'

按照以下步骤

@property(nonatomic,strong) IBOutlet AppDelegate *appDelegate; // .h file
self.appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; // .m file. //ViewDidLoad Method

现在您可以访问方法作为

[self.appDelegate myBlue]

其他

[delegate myBlue] // as per your code

最后你需要知道类和类之间的区别;实例方法

-(void)someInstanceMethod{
//Whatever you want your instance method to do here
}
+(void)someClassMethod{
//Whatever you want your class method to do here
}

FYI:

此外,如果你想在Objective-C文件中使用Swift文件或将其混合使用,你需要有BridgeHeader文件

遵循@Pushkraj Lanjekar 建议的答案

希望能有所帮助。

  1. 您需要添加@objc作为要从Swift文件访问目标C的变量或函数的前缀,或者如果要访问从Swift文件到目标C的所有内容,则需要将类标记为@objcMembers

  2. 确保您已经创建了一个桥接头文件。这里是帮助链接

  3. 您需要在Objective C文件中导入桥接标头。

如果您完成了上述所有三个步骤,您将能够访问该函数。

AppDelegate是一个Swift文件,您需要将其导入到Objective-C文件中。查看苹果将swift导入Objective-C的指南,您需要:

  1. 将genareted Swift标头导入SettingsViewController.m

    #导入";ThinkNotes Swift.h";

如果模块名称不是ThinkNotes,则将其替换为您的项目模块名称。

  1. 确保需要从Objective-C访问的Swift类的声明中有@objc属性

最新更新