我在我的swift项目中使用obj c并且它工作(使用桥文件)。 但是,如果我想通过“example.m”文件调用一个快速函数,我该怎么做?像:
修改 我像第一语言一样使用Swift
- (void)start
{
var i=0;
if( i == 0)
{
//How I can call a swift function?
}
}
答案 0 :(得分:1)
你必须确保在快速课程之前加上@objc
。如果您想在Objective-c代码中使用swift类,那么@objc
之前总是需要class
@objc class foo{
func printSomething() {
println("Hello World")
}
}
修改强>
如果您从像NSObject
这样的Objective-C类继承,则不需要将@objc
放在它之前。
感谢@Logan
答案 1 :(得分:1)
使用以下步骤从objective-c类调用swift函数
步骤1:在“YourObjectiveClass.m”中添加#import“YourProjectNameSwift-Swift.h”
#import "YourProjectNameSwift-Swift.h"
第2步:在YourObjectiveClass.h中添加@class YourSwiftClass; 例如:
#import <UIKit/UIKit.h>
@class YourSwiftClassViewController;
@interface ViewController : UIViewController
第3步:然后在YourObjectiveClass.m
中`YourSwiftClassViewController *myClassInstance = [YourSwiftClassViewController new];`
[myClassInstance swiftClassMethodName];
{在任何方法中调用它都是否要调用swift方法。}
第4步:你需要在Swift Class之前放置@objc
@objc class YourSwiftClass: UIViewController {
let sliceAngle = ((M_PI * 2) / 8)
override func viewDidLoad() {
super.viewDidLoad()
}
//MARK:- Instance Methods
func spinLayer(inLayer: CALayer, duration: CFTimeInterval, direction: Int, index: Int, mImageView: UIImageView) {
// Rotate about the z axis
CATransaction.begin()
let rotationAnimation: CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
}
}
注意: - 如果你继承了像NSObject这样的Objective-C类,那么你 不需要在类名之前放置@objc。