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

标签 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")
    }

}

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

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

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

谢谢,大卫

最佳答案

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

我这样做了:

  1. 将我的旧项目升级到 Xcode 6,并将 Deployment Target 设置为 7.1
  2. 创建了一个新的 Swift 文件并同意配置 Objective-C 桥接 header 。
  3. 将您的代码粘贴到其中。 (我还必须为 UIColor 导入 UIKit 才能编译。)
  4. 在我的主视图 Controller 中,我把这个:

在顶部:

#import "PhotoUnzipper-Swift.h"

(PhotoUnzipper 是我项目的名称)

并在 viewDidLoad 中:

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

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

重要:没有导入 <#ProjectName#>-Swift.h文件。 Xcode 负责这件事。

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

关于ios - 将 Swift 集成到 Objective-C 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25953362/

相关文章:

ios - 为什么在 Xcode 6 上构建的应用程序似乎在 iOS 8 设备上使用 iOS 8 系统库,而在 Xcode 5 上构建的应用程序却没有?

arrays - 使用 For 循环迭代数组 30 次

json - 在 Swift 中从 JSON 文件中获取值

iphone - 我应该调用 removeFromSuperview 还是 release 就好了?

ios - Realm 主键迁移 - Objective-C

objective-c - 如何使用performSelector :withObject:afterDelay: on a method with multiple arguments

xcode - performSegueWithIdentifier 抛出未知异常

ios - 如何在 MIDI 输入线程中将多个消息与单个数据包分开

ios - 我如何知道屏幕上的任何对象何时被点击?

objective-c - Objective-C : How to add color to entire cell (with a disclosure indicator)