2014-09-20 22 views
1

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

我导入<#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,但我无法访问类中的函数;正如你所看到的那样,@objc前缀在类中及其函数上。

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

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

谢谢,大卫

+0

建议在这里:http://stackoverflow.com/questions/24206732/cant-use-swift-classes-inside-objective-c?rq=1 – Caroline 2014-09-20 22:57:22

+0

@Caroline我没有创建'<#ProjectName#> -Swift.h'自己。我知道它是由Xcode创建的。我导入了'<#ProjectName#> - Swift.h'文件,并用我的项目名称替换了<#ProjectName#>'。我真的不知道我做错了什么。你有其他建议吗? – 2014-09-20 23:07:30

+0

您是如何创建类的实例并从ObjC调用函数的?什么不工作。你不能编译?你跑步时什么都没有发生? – vacawama 2014-09-21 01:39:25

回答

2

我只是测试,看看它为我的作品在一个古老的目标C项目。我在Xcode 6.0.1上。

我这样做:

  1. 升级我的老项目的Xcode 6和部署目标设定为7.1
  2. 创建一个新雨燕文件,并配置一个Objective-C桥接报说是的。
  3. 将您的代码粘贴到其中。 (我也有进口的UIKit为的UIColor编译。)
  4. 在我的主视图控制器,我把这个:

在顶部:

#import "PhotoUnzipper-Swift.h" 

(PhotoUnzipper的在我的项目的名称)

在viewDidLoad中:

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

它编译,我得到了“测试”在控制台中打印出来。

重要:我并没有导入<#ProjectName#>-Swift.h文件。 Xcode负责照顾。

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

+0

这很奇怪。在我重新启动我的Mac并删除偏差的Data eveything后,工作正常......无论如何,感谢您的帮助! – 2014-09-21 09:40:56

+0

无法正常工作..仍然给我一个预期的类型错误。清除派生数据。 – nferocious76 2014-12-22 04:11:56