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

时间:2019-02-03 19:27:18

标签: ios objective-c swift class

我正在尝试从Objective-C文件中迅速编写的实用程序文件中的一些代码。

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

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

return image
}
}

我正在尝试通过以下方式从Objective-C文件中调用它:

 UIImage *myImage = [ImageClass imageFromString:@"test"];

但是这给出了错误:

Use of undeclared identifier 'ImageClass'

我知道从Objective-C文件可以访问实用程序文件,因为尽管我使用共享实例调用了其他方法。

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

编辑:

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

- (UIImage * _Nullable)imageFromStringWithName:(NSString * _Nullable)name SWIFT_WARN_UNUSED_RESULT;

因此,我尝试将WithName(我忘记了)添加到调用中,这样我就可以了:

 UIImage *myImage = [ImageClass imageFromStringWithName:@"test"];

但是在方法之前使用或不使用@objc仍然会出错:

No known class method for selector 'imageFromStringWithName:'

2 个答案:

答案 0 :(得分:1)

将此行添加到您的Objective-C文件中:

#import "YourProjectName-Swift.h"

用项目名称替换YourProjectName。这将使您的项目中所有与Objective-C兼容的Swift类对您的Objective-C代码可见。

请注意,您还需要在@objc声明中添加func批注,以使方法对Objective-C可见。

答案 1 :(得分:1)

迅速4.2

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

    #import "YourProjectName-Swift.h"
    
  2. 在函数之前添加@objc:

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

    ImageClass *imgObject = [[ImageClass alloc] init];   
    UIImage *myImage = [imgObject imageFromStringWithName:@"test"];