从 Objective-C 类调用 Swift 方法的语法

use*_*273 4 class objective-c ios swift

我正在尝试从objective-c文件中调用以swift编写的Utilities文件中的一些代码。

现在 swift 文件中的类如下所示:

class ImageClass: NSObject {
public func imageFromString(name: String?) -> UIImage? {
//code to make image

return image
}
}
Run Code Online (Sandbox Code Playgroud)

我试图从 Objective-C 文件中调用它:

 UIImage *myImage = [ImageClass imageFromString:@"test"];
Run Code Online (Sandbox Code Playgroud)

然而,这是给出错误:

Use of undeclared identifier 'ImageClass'
Run Code Online (Sandbox Code Playgroud)

我知道可以从 Objective-C 文件访问 Utilities 文件,因为我使用共享实例调用了那里的其他方法。

任何人都可以建议调用代码的正确方法吗?我实际上不在乎它是一个类还是通过 sharedInstance,我只需要能够调用它。

编辑:

正如@Charles Srstka 所建议的,我 CMD 单击#import myapp.swift文件,跳转到定义,它在标题中显示以下内容:

- (UIImage * _Nullable)imageFromStringWithName:(NSString * _Nullable)name SWIFT_WARN_UNUSED_RESULT;
Run Code Online (Sandbox Code Playgroud)

因此,我尝试将 WithName (我忘记了)添加到调用中,所以我有:

 UIImage *myImage = [ImageClass imageFromStringWithName:@"test"];
Run Code Online (Sandbox Code Playgroud)

但是在使用或不使用 @objc before 方法时仍然出错:

No known class method for selector 'imageFromStringWithName:'
Run Code Online (Sandbox Code Playgroud)

小智 6

在 swift 4.2 和最新版本中

  1. 将此行添加到您的“*.m”文件中:

    #import "YourProjectName-Swift.h"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在函数前添加@objc:

    @objc public func imageFromString(name: String?) -> UIImage? {    
    //code to make the image
    return image
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在 Objective-C 类中调用它:

    ImageClass *imgObject = [[ImageClass alloc] init];   
    UIImage *myImage = [imgObject imageFromStringWithName:@"test"];
    
    Run Code Online (Sandbox Code Playgroud)