【问题标题】:How to import swift file into objective-c file in a swift project如何在swift项目中将swift文件导入objective-c文件
【发布时间】:2015-10-27 16:20:30
【问题描述】:

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

【问题讨论】:

    标签: ios objective-c swift


    【解决方案1】:

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

    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”。 (你会学到更多 关于产品模块名称,请在命名您的产品模块中。)

    例子:

    Foo.swift 在名为 ExampleProduct

    的产品中
    @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() 甚至更容易。

    来回跳跃没有限制。

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

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

    % 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 票值得研究!

    【讨论】:

    • 我试过了。它说找不到#import 文件。我的情况是这样的:我想将 swift 类 导入到一个 objective-c 文件 中,它们都属于 swift 项目。您的解决方案是将 swift 类导入到 Objective-C 项目中,对吧?
    • 请发布您的代码。我的解决方案是在一个 Swift 项目中。一旦您的目标混合了 Obj-C/Swift(即,只要您将 Obj 文件添加到 Swift 项目中),Xcode 就会静默创建 ExampleProduct-Swift.h。这是失败的路线吗?您的产品名称是否正确?也许是截图?
    • 已编辑以解决您的导入问题。
    猜你喜欢
    • 1970-01-01
    • 2016-11-20
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2015-11-30
    • 2017-03-28
    相关资源
    最近更新 更多