如何在swift项目中将swift文件导入objective-c文件

时间:2015-08-05 04:00:19

标签: ios objective-c swift

情况有点复杂。我有一个Swift项目,我已经将一些Objective-C文件导入到这个项目中。现在,我想在这些Objective-C文件中使用一些Swift类。怎么做?

1 个答案:

答案 0 :(得分:2)

这个参考文献似乎涵盖了所有内容:

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

具体做法是:

  

将Swift导入Objective-C

     

当您将Swift代码导入Objective-C时,您依赖于   Xcode生成的头文件将这些文件暴露给Objective-C。这个   自动生成的文件是一个声明的Objective-C头   目标中的Swift接口。它可以被认为是一种   你的Swift代码的标题。这个标题的名称是你的   产品模块名称后跟添加" -Swift.h"。 (你会了解更多   有关产品模块名称,请参阅命名产品模块。)

示例:

名为 ExampleProduct

的产品中的Foo.swift
@objc public class Bar: NSObject {
    var x: Int = 3
}

Blah.m在同一产品中:

#import <Foundation/Foundation.h>
#import <ExampleProduct-Swift.h>

void doStuff() {
    Bar *y = [[Bar alloc] init];
    printf("%ld\n", (long)y.x);
}

如果您创建一个定义函数原型的Objective-C头文件,然后在桥接头中导入该头文件,那么从Swift文件调用doStuff()甚至更容易。

来回跳跃是没有限制的。

根据评论,您似乎无法导入反向桥接标头。

在终端中尝试此操作以确保您正确命名文件:

% cd ~/Library/Developer/Xcode; find . -name '*-Swift.h'

我得到(向右滚动):

./DerivedData/ExampleProduct-avoxifngmebkkqgndldocildsfcm/Build/Intermediates/ExampleProduct.build/Debug-iphonesimulator/ExampleProduct.build/DerivedSources/ExampleProduct-Swift.h
./DerivedData/ExampleProduct-avoxifngmebkkqgndldocildsfcm/Build/Intermediates/ExampleProduct.build/Debug-iphonesimulator/ExampleProduct.build/Objects-normal/x86_64/ExampleProduct-Swift.h
./DerivedData/ExampleProduct-avoxifngmebkkqgndldocildsfcm/Build/Intermediates/ExampleProduct.build/Debug-iphonesimulator/ExampleProductTests.build/DerivedSources/ExampleProductTests-Swift.h
./DerivedData/ExampleProduct-avoxifngmebkkqgndldocildsfcm/Build/Intermediates/ExampleProduct.build/Debug-iphonesimulator/ExampleProductTests.build/Objects-normal/x86_64/ExampleProductTests-Swift.h

此外,可能是重复:

How to call Objective-C code from Swift

有326个值得研究的赞成票!