在Objective-C

时间:2015-07-29 22:22:46

标签: ios objective-c xcode swift

我尝试file not found时收到#import "DodgeHeroReal-Swift.h错误。我的产品模块名称设置为DodgeHeroReal,定义模块也设置为YES(两种构建设置都在目标级别和项目级别)。我已经有了一个由Xcode生成的Bridging标头。我有一个快速的类emojisClass,我希望能够在我的Objective-C ViewController EmojiShopViewController中使用。

我看了很多关于混合objc和swift项目的精彩StackOverflow帖子,但没有一个提出的解决方案似乎有效。我也查看了Apple Documentation页面,但这也没有帮助。有人可以告诉我如何在ViewController.m中使用以下swift类吗?

这是GlobalFunc.swift(具有类emojisClass

@objc(EmojiClass) class emojisClass {
    @objc(buyAngle) func buyAngle(){
        if(emotiBucks >= 10000){
             var value = emotiBucks-10000
             NSUserDefaults.standardUserDefaults().setBool(true, forKey: "haveAngleEmoji")
            NSUserDefaults.standardUserDefaults().setInteger(value, forKey: "emotiBucks")
            NSUserDefaults.standardUserDefaults().synchronize()
        }
    }
    func buyAlien(){
        if(emotiBucks >= 2000){
            var value = emotiBucks-2000
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "haveAlienEmoji")
            NSUserDefaults.standardUserDefaults().setInteger(value, forKey: "emotiBucks")
            NSUserDefaults.standardUserDefaults().synchronize()
        }
    }
    func buySassy(){
        if(emotiBucks >= 5000){
            var value = emotiBucks-5000
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "haveSassyEmoji")
            NSUserDefaults.standardUserDefaults().setInteger(value, forKey: "emotiBucks")
            NSUserDefaults.standardUserDefaults().synchronize()
        }
    }
    func buyHeart(){
        if(emotiBucks >= 3000){
            var value = emotiBucks-3000
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "haveHeartEmoji")
            NSUserDefaults.standardUserDefaults().setInteger(value, forKey: "emotiBucks")
            NSUserDefaults.standardUserDefaults().synchronize()
        }
    }   
}

我已经在我的EmojiShopviewController.m中导入了桥接头:#import "Dodge Hero-Bridging-Header.h"。现在我希望能够调用在我的swift文件中声明的函数buyAngle()。

编辑:该项目最初是一个快速项目,然后我添加了Obj-C文件,然后是Bridging-Header。所以该项目包含.swift和objc文件,现在我希望能够生成ProductModule-Swift.h而不删除任何当前文件。

编辑2 :在我的DerivedData目录中运行find * -iname '*Swift.h'然后在终端中的CMD + F返回:

****** Other stuff ********
DodgeHeroReal-gmmvxsfrydixythkdwqjpncbqlpl/Build/Intermediates/DodgeHeroReal.build/Debug-iphonesimulator/DodgeHeroRealTests.build/DerivedSources/DodgeHeroReal-Swift.h
DodgeHeroReal-gmmvxsfrydixythkdwqjpncbqlpl/Build/Intermediates/DodgeHeroReal.build/Debug-iphonesimulator/DodgeHeroRealTests.build/DerivedSources/DodgeHeroRealTests-Swift.h
DodgeHeroReal-gmmvxsfrydixythkdwqjpncbqlpl/Build/Intermediates/DodgeHeroReal.build/Debug-iphonesimulator/DodgeHeroRealTests.build/Objects-normal/x86_64/DodgeHeroReal-Swift.h
****** More other stuff ********

2 个答案:

答案 0 :(得分:2)

我发现有时swift文件中的错误会导致ProjectName-Swift.h文件无法生成,并且没有警告。尝试让所有swift文件都没有错误,即使你必须暂时伪造它,例如,通过注释某些内容或添加编译而没有错误的虚拟代码。另外,请确保您从Objective-C引用的swift类继承自NSObject或其他一些Objective-C类,并确保它们不是全部标记为私有。我浪费了几天试图弄清楚为什么会发生这种错误 - 这真的很令人沮丧!

请注意,您可以在import语句中按命令单击Swift-> Objective-C桥接文件的文件名,Xcode将显示其内容。如果它发出错误蜂鸣声,那显然意味着找不到文件,因此可能没有生成。

答案 1 :(得分:1)

我碰到了这一次,我的问题是同一个swift文件中的枚举没有用@objc标记标记。