将Swift集成到Objective-C应用程序

时间:2014-09-20 21:15:20

标签: ios objective-c swift

我有一个Objective-C应用程序,我喜欢整合Swift,但我有一个奇怪的问题。

我将<#ProjectName#>-Swift.h导入到我的实现文件中,我需要Swift类。我的Swift类看起来像这样:

import Foundation

@objc class FileIconColor: NSObject {

    @objc func fileIconColorForSuffix(suffix: NSString) -> UIColor {
        var color:UIColor!
        //Some huge calculations
        return color
    }

    //Just for testing
    @objc func test () {
        println("Test")
    }

}

我可以调用Class,但是我无法访问类中的函数;如您所见,Class和它的函数都有@objc前缀。

你知道为什么会这样吗?我还想在使用该函数之前构建项目,因为首先需要构建Swift桥接头,我是否正确?

哦,顺便说一句,我设法在我的Swift类中访问Objective-C代码。所以没有太大的错误(我手动创建了Objective-C桥接头):)

谢谢大卫

1 个答案:

答案 0 :(得分:2)

我刚测试过它在旧的Objective C项目中对我有用。我正在使用Xcode 6.0.1。

我这样做了:

  1. 将我的旧项目升级到Xcode 6,并将Deployment Target设置为7.1
  2. 创建了一个新的Swift文件,并说是配置Objective-C桥接头。
  3. 将代码粘贴到其中。 (我还必须导入UIKit进行UIColor编译。)
  4. 在我的主视图控制器中,我把它放在:
  5. 在顶部:

    #import "PhotoUnzipper-Swift.h"
    

    (PhotoUnzipper是我项目的名称)

    并在viewDidLoad中:

    FileIconColor *color = [[FileIconColor alloc]  init];
    [color test];
    

    它已编译,我在控制台中打印出“Test”。

    重要提示: 导入<#ProjectName#>-Swift.h文件。 Xcode负责这一点。

    我第一次尝试时遇到问题,因为我的部署目标为4.1。 (愚蠢的我。)我似乎无法解决这个问题,但又开始了,并且完全按照上面的步骤进行操作。