我正在尝试从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:'
答案 0 :(得分:1)
将此行添加到您的Objective-C文件中:
#import "YourProjectName-Swift.h"
用项目名称替换YourProjectName
。这将使您的项目中所有与Objective-C兼容的Swift类对您的Objective-C代码可见。
请注意,您还需要在@objc
声明中添加func
批注,以使方法对Objective-C可见。
答案 1 :(得分:1)
迅速4.2
将此行添加到您的“ * .m”文件中:
#import "YourProjectName-Swift.h"
在函数之前添加@objc:
@objc public func imageFromString(name: String?) -> UIImage? {
//code to make the image
return image
}
在Objective-C类中调用它:
ImageClass *imgObject = [[ImageClass alloc] init];
UIImage *myImage = [imgObject imageFromStringWithName:@"test"];