在objective-c中调用swift func

时间:2014-12-18 16:05:32

标签: ios objective-c function swift

我在我的swift项目中使用obj c并且它工作(使用桥文件)。 但是,如果我想通过“example.m”文件调用一个快速函数,我该怎么做?像:

修改 我像第一语言一样使用Swift

- (void)start
{
    var i=0;
    if( i == 0)
    {
        //How I can call a swift function? 
    }
}

2 个答案:

答案 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。