【问题标题】:Can't use Swift classes inside Objective-C不能在 Objective-C 中使用 Swift 类
【发布时间】:2014-08-04 02:19:01
【问题描述】:

我尝试在我的应用程序中集成Swift 代码。我的应用程序是用Objective-C 编写的,我添加了一个Swift 类。我已经完成了here 描述的所有事情。但我的问题是Xcode 没有创建-Swift.h 文件,只有桥接头。所以我创建了它,但它实际上是空的。 我可以在 Swift 中使用我所有的 ObjC 类,但反之则不行。我用@objc 标记了我的快速课程,但它没有帮助。我现在能做什么?

编辑:Apple 说:“当您将 Swift 代码导入 Objective-C 时,您依赖 Xcode-generated 头文件将这些文件公开给 Objective-C。[...] 这个头文件的名称是您的产品模块名称后跟“-Swift.h”。"

现在当我想导入那个文件时,它给出了一个错误:

    //MainMenu.m

    #import "myProjectModule-Swift.h" //Error: 'myProjectModule-Swift.h' file not found

    @implementation MainMenu

这是我的 FBManager.swift 文件:

@objc class FBManager: NSObject {

    var descr = "FBManager class"

    init() {
        super.init()
    }

    func desc(){
        println(descr)
    }

    func getSharedGameState() -> GameState{
        return GameState.sharedGameState() //OK! GameState is written in Objective-C and no error here
    }
}

【问题讨论】:

  • YourProjectName-Swift.h 应该是 Xcode 在编译期间自动为您创建的神奇头文件(您实际上不会在项目浏览器中看到它)。尝试删除您创建的那个,并将#import YourProjectName-Swift.h 添加到您要在其中使用 Swift 类的文件中。
  • 您正在构建的应用程序是否名为myProjectModule-Swift.h 文件应以您的应用名称开头。您有以-Bridging-Header.h 结尾的文件吗?你应该。如果是这样,该文件的第一部分是您的项目名称。将该文件名的第一部分与-Swift.h 结合起来,这就是您应该包含的内容。
  • 我已经成功地在我的项目中工作了,但是在我的 Mac 上找不到以 -Swift.h 结尾的实际文件,但我可以包含它。所以不要挂断寻找这样的文件。只要确保你正确命名它。
  • @vacawama 请注意,在将导入语句添加到 Objective-C 文件后,您可以通过 Command-单击导入来查看内容,就像访问任何其他头文件一样。
  • 我不得不使用#import <MyProjectName/MyProjectName-Swift.h>

标签: ios objective-c swift


【解决方案1】:

我花了大约 4 个小时尝试在我的 Xcode 基于 Objective-C 的项目中启用 Swift。我的myproject-Swift.h 文件创建成功,但我的Xcode 没有看到我的Swift-classes。所以,我决定创建一个新的基于Xcode Objc 的项目,最后,我找到了正确的答案!希望这篇文章对某人有所帮助:-)

基于 Xcode Objc 的项目的逐步 Swift 集成:

  1. 创建新的*.swift 文件(在 Xcode 中)或使用 Finder 添加它。
  2. 当 Xcode 询问您时创建一个 Objective-C bridging header
  3. 实现你的 Swift 类:

    import Foundation
    
    // use @objc or @objcMembers annotation if necessary
    class Foo {
        //..
    }
    
  4. 打开构建设置并检查这些参数:

    • 定义模块: YES

      在搜索栏中复制和粘贴参数名称

    • 产品模块名称: myproject

      确保您的产品模块名称不包含任何特殊字符

    • 安装 Objective-C 兼容性标头: YES

      *.swift 文件添加到项目后,此属性将出现在构建设置中

    • Objective-C 生成的接口头文件: myproject-Swift.h

      此标头由 Xcode 自动生成

    • Objective-C 桥接头: $(SRCROOT)/myproject-Bridging-Header.h
  5. 在您的 *.m 文件中导入 Swift 接口标头。

    #import "myproject-Swift.h"
    

    不要关注错误和警告。

  6. 清理并重建您的 Xcode 项目。
  7. 利润!

【讨论】:

  • 在上面的第 4 步中,有没有人在developer.apple.com/library/prerelease/ios/documentation/Swift/… 的文档中看到提到了所需的配置(至少对我而言)?如果是我错过了。谢谢@sig。
  • 我的问题要简单得多——我找不到文件"myproject-Swift.h",所以在我看来它似乎不起作用。显然,这个文件在项目导航器中是不可见的。
  • @Asaf 实际上,是的,该文件由 Xcode 自动生成并位于您的项目构建路径中。因此,您可以在 Finder/Console 中手动找到该文件,或者在 Xcode 中使用 Cmd+LeftClick #import "myproject-Swift.h" 直接打开它。
  • 对我来说 #5 足以解决问题!
  • 用你这 4 个小时,你节省了我们数百个小时,非常感谢 :) 保存在我的收藏夹中 ;)
【解决方案2】:

不要自己创建头文件。删除你创建的那个。

确保您的 Swift 类带有 @objc 标记或继承自(直接或间接)派生​​自 NSObject 的类。

如果您的项目中有任何编译器错误,Xcode 将不会生成该文件 - 请确保您的项目构建干净。

【讨论】:

  • 可构建是我的关键。无法构建,因为它找不到我的 -swift.h 文件,但它找不到我的 -swift.h 文件,因为它无法构建:/
  • @anders 在被困在那个循环中时,您可以使用find ~/library/Developer/Xcode/DerivedData/ -name "*-Swift.h"|xargs basename|sort -u 来查看文件是否是用一个意外的名称创建的,就像对我来说一样。 :)
  • 确保*-Bridging-Header.h 文件也被创建,而不仅仅是*-Swift.h 文件。拥有它是至关重要的,即使它是空的。如果未创建,请自行创建,并将其添加到Objective-C Bridging Header 值的项目构建设置中。
【解决方案3】:

允许 Xcode 完成它的工作,不要手动添加/创建 Swift 标头。只需在您的 Swift 类前添加 @objc 即可。

@objc class YourSwiftClassName: UIViewController

在您的项目设置中搜索以下标志并将其更改为 YES(项目和目标)

Defines Module : YES
Always Embed Swift Standard Libraries : YES
Install Objective-C Compatibility Header : YES

然后清理项目并构建一次,构建成功后(可能应该)在你的objective-c类.m文件中导入下面的头文件

#import "YourProjectName-Swift.h" 

轰隆隆!

【讨论】:

  • 谢谢,这非常简单,解决了我的问题。
  • 我在 Build Settings (Xcode 7.3.1) 中没有看到这些选项。我该怎么办?
  • ^ 必须在顶部栏中从 Basic 切换到 All
  • Embedded Content Contains Swift 使用 Xcode 8 更改为 Always Embed Swift Standard Librariesstackoverflow.com/questions/38792650/…
  • @WilliamGrand 感谢您的建议,更新了答案。
【解决方案4】:

也可能对那些拥有框架目标的人有所帮助:

自动生成的头文件的import 语句看起来与应用目标有点不同。除了其他答案中提到的其他事情之外,请使用

#import <ProductName/ProductModuleName-Swift.h>

而不是

#import "ProductModuleName-Swift.h"

根据 Apples 关于框架目标的 Mix & Match 文档。

【讨论】:

  • @dinesharjani 很高兴我能帮上忙! :)
  • 捆绑目标怎么样?
【解决方案5】:

确保您的项目定义了一个模块,并且您已为该模块命名。然后重建,Xcode 会创建-Swift.h 头文件,你就可以导入了。

您可以在项目设置中设置模块定义和模块名称。

【讨论】:

    【解决方案6】:

    详情: Xcode 8.1 中带有 Swift 3 代码的 Objective-C 项目

    任务:

    1. 在 Objective-C 类中使用 Swift 枚举
    2. 在 swift 类中使用objective-c 枚举

    完整样本

    1。使用 Swift 枚举的 Objective-C 类

    ObjcClass.h

    #import <Foundation/Foundation.h>
    
    typedef NS_ENUM(NSInteger, ObjcEnum) {
        ObjcEnumValue1,
        ObjcEnumValue2,
        ObjcEnumValue3
    };
    
    @interface ObjcClass : NSObject
    
    + (void) PrintEnumValues;
    
    @end
    

    ObjcClass.m

    #import "ObjcClass.h"
    #import "SwiftCode.h"
    
    @implementation ObjcClass
    
    + (void) PrintEnumValues {
        [self PrintEnumValue:SwiftEnumValue1];
        [self PrintEnumValue:SwiftEnumValue2];
        [self PrintEnumValue:SwiftEnumValue3];
    }
    
    + (void) PrintEnumValue:(SwiftEnum) value {
        switch (value) {
            case SwiftEnumValue1:
                NSLog(@"-- SwiftEnum: SwiftEnumValue1");
                break;
                
            case SwiftEnumValue2:
            case SwiftEnumValue3:
                NSLog(@"-- SwiftEnum: long value = %ld", (long)value);
                break;
        }
    }
    
    @end
    

    在 Objective-C 代码中检测 Swift 代码

    在我的示例中,我使用 SwiftCode.h 来检测 Objective-C 中的 Swift 代码。此文件自动生成(我没有在项目中创建此头文件的物理副本),您只能设置此文件的名称:

    如果编译器找不到你的头文件Swift代码,请尝试编译项目。

    2。使用 Objective-C 枚举的 Swift 类

    import Foundation
    
    @objc
    enum SwiftEnum: Int {
        case Value1, Value2, Value3
    }
    
    @objc
    class SwiftClass: NSObject {
        
        class func PrintEnumValues() {
            PrintEnumValue(.Value1)
            PrintEnumValue(.Value2)
            PrintEnumValue(.Value3)
        }
        
        class func PrintEnumValue(value: ObjcEnum) {
            switch value {
            case .Value1, .Value2:
                NSLog("-- ObjcEnum: int value = \(value.rawValue)")
                
            case .Value3:
                NSLog("-- ObjcEnum: Value3")
                break
            }
            
        }
    }
    

    在 Swift 代码中检测 Objective-C 代码

    您需要创建桥接头文件。当你在 Objective-C 项目中添加 Swift 文件,或者在 swift 项目中添加 Objective-C 文件时,Xcode 会建议你创建桥接头。

    您可以在此处更改桥接头文件名:

    Bridging-Header.h

    #import "ObjcClass.h"
    

    用法

    #import "SwiftCode.h"
    ...
    [ObjcClass PrintEnumValues];
    [SwiftClass PrintEnumValues];
    [SwiftClass PrintEnumValue:ObjcEnumValue3];
    

    结果


    更多样品

    上述 Objective-c 和 Swift 的完整集成步骤。现在我会写一些其他的代码示例。

    3。从 Objective-c 代码调用 Swift 类

    Swift 类

    import Foundation
    
    @objc
    class SwiftClass:NSObject {
        
        private var _stringValue: String
        var stringValue: String {
            get {
                print("SwiftClass get stringValue")
                return _stringValue
            }
            set {
                print("SwiftClass set stringValue = \(newValue)")
                _stringValue = newValue
            }
        }
        
        init (stringValue: String) {
            print("SwiftClass init(String)")
            _stringValue = stringValue
        }
        
        func printValue() {
            print("SwiftClass printValue()")
            print("stringValue = \(_stringValue)")
        }
        
    }
    

    Objective-C 代码(调用代码)

    SwiftClass *obj = [[SwiftClass alloc] initWithStringValue: @"Hello World!"];
    [obj printValue];
    NSString * str = obj.stringValue;
    obj.stringValue = @"HeLLo wOrLd!!!";
    

    结果

    4。从 Swift 代码调用 Objective-c 类

    Objective-C 类(ObjcClass.h)

    #import <Foundation/Foundation.h>
    
    @interface ObjcClass : NSObject
    @property NSString* stringValue;
    - (instancetype) initWithStringValue:(NSString*)stringValue;
    - (void) printValue;
    @end
    

    ObjcClass.m

    #import "ObjcClass.h"
    
    @interface ObjcClass()
    
    @property NSString* strValue;
    
    @end
    
    @implementation ObjcClass
    
    - (instancetype) initWithStringValue:(NSString*)stringValue {
        NSLog(@"ObjcClass initWithStringValue");
        _strValue = stringValue;
        return self;
    }
    
    - (void) printValue {
        NSLog(@"ObjcClass printValue");
        NSLog(@"stringValue = %@", _strValue);
    }
    
    - (NSString*) stringValue {
        NSLog(@"ObjcClass get stringValue");
        return _strValue;
    }
    
    - (void) setStringValue:(NSString*)newValue {
        NSLog(@"ObjcClass set stringValue = %@", newValue);
        _strValue = newValue;
    }
    
    @end
    

    Swift 代码(调用代码)

    if let obj = ObjcClass(stringValue:  "Hello World!") {
        obj.printValue()
        let str = obj.stringValue;
        obj.stringValue = "HeLLo wOrLd!!!";
    }
    

    结果

    5。在 Objective-c 代码中使用 Swift 扩展

    Swift 扩展

    extension UIView {
        static func swiftExtensionFunc() {
            NSLog("UIView swiftExtensionFunc")
        }
    }
    

    Objective-C 代码(调用代码)

    [UIView swiftExtensionFunc];
    

    6。在 swift 代码中使用 Objective-c 扩展

    Objective-C 扩展 (UIViewExtension.h)

    #import <UIKit/UIKit.h>
    
    @interface UIView (ObjcAdditions)
    + (void)objcExtensionFunc;
    @end
    

    UIViewExtension.m

    @implementation UIView (ObjcAdditions)
    + (void)objcExtensionFunc {
        NSLog(@"UIView objcExtensionFunc");
    }
    @end
    

    Swift 代码(调用代码)

    UIView.objcExtensionFunc()
    

    【讨论】:

    • 这些样本真的很有帮助,谢谢!而对于 Swift 4+,我们需要在类前面添加@objcMembers。因为在 Swift 4 中,@objc 推断已被减少以进行优化。例如,NSObject 派生类中的属性将不再默认推断 @objc(就像在 Swift 3 中所做的那样)。我从this answer 得到这个情报。
    【解决方案7】:

    我遇到了同样的问题,结果模块名称中的特殊符号被 xcode 替换(在我的例子中,破折号最终变成了下划线)。在项目设置中检查“模块名称”以查找项目的模块名称。之后使用ModuleName-Swift.h 或在设置中重命名模块。

    【讨论】:

    • 我是个白痴。我正在添加类名称,然后附加“-Swift”。原来它是“模块”名称。 +1 让我意识到这一点。
    • 这里的另一个白痴谁认为这是类名!
    【解决方案8】:

    文件是自动创建的(这里讨论的是 Xcode 6.3.2)。但是您不会看到它,因为它位于您的派生数据文件夹中。用@objc 标记你的swift 类后,编译,然后在你的Derived Data 文件夹中搜索Swift.h。您应该在那里找到 Swift 标头。

    我遇到了问题,Xcode 将我的 my-Project-Swift.h 重命名为 my_Project-Swift.h Xcode 不喜欢 "." "-" 等符号。通过上面的方法,您可以找到文件名并将其导入到 Objective-C 类中。

    【讨论】:

    • 这也解决了我的问题。在我的 .m 文件中,我像 #import "my_project-Swift.h" 这样导入文件,我的实际项目名称是 my-project
    • 注意——不仅仅是“。” “-”也是空格:(
    【解决方案9】:

    只包括 #import "myProject-Swift.h" 在 .m 或 .h 文件中

    P.S 你不会在文件检查器中找到“myProject-Swift.h”,它是隐藏的。但它是由应用程序自动生成的。

    【讨论】:

    • 谢谢提醒,伙计。
    • 这个答案帮助了我并挽救了我的一天。重要的是 Xcode 会自动生成它并且它是 HIDDEN 文件。我自己创建了“myProject-Swift.h”,但它不起作用。
    【解决方案10】:

    对于 Swift 5:

    1. @objc 关键字添加到您的类和方法中
    2. public 关键字添加到您的类和方法中
    3. 让你的类继承自NSObject
    4. 构建项目
    5. #import "MyProject-Swift.h" 放入您的 Objective-C 文件中

      @objc
      public class MyClass: NSObject {
      
          @objc
          public func myMethod() {
      
          }
      }
      

    【讨论】:

    • “将@objc 关键字添加到你的类和方法中”——Swift 4 也是如此
    【解决方案11】:

    @sig 答案是最好的答案之一,但是,它不适用于旧项目(不是新项目!),我需要一些修改。经过很多变化后,我找到了适合我的方法(使用 XCode 7.2):

    1. 产品模块名称:$(PRODUCT_NAME:c99extidentifier)
    2. 定义模块:否
    3. 嵌入内容包含 Swift:否
    4. 安装 Objective-C 兼容性标头:是
    5. Objective-C 桥接头:ProjectName-Bridging-Header.h

    最后一点 (5) 至关重要。我只把它放在第二部分(Targets 字段),Project 字段应该留空: 否则,它没有为我生成正确的“Project-Swift.h”文件(它不包括 swift 方法) .

    【讨论】:

    • 还有一个有用的链接:ericasadun.com/2014/08/21/…
    • 谢谢谢谢谢谢非常感谢@DariusMiliauskas 只能使用您的链接
    • @DariusMiliauskaskas 非常感谢! 5 点也为我解决了旧 Xcode 项目中的问题
    • Define Modules 应该是No??
    • @SunilChauhan,是的,it is only used for framewoks
    【解决方案12】:

    有两个条件,

    • 在目标 c 文件中使用您的 swift 文件。
    • 在 swift 文件中使用您的目标 c 文件。

    因此,为此,您必须按照以下步骤操作:

    • 将您的 swift 文件添加到 Objective-c 项目中,反之亦然。
    • 创建头文件(.h)。
    • 转到构建设置并使用搜索执行以下步骤,

      1. 搜索此文本“brid”并设置头文件的路径。
      2. “定义模块”:是。
      3. “始终嵌入 Swift 标准库”:是的。
      4. “安装 Objective-C 兼容性标头”:是。

    之后,清理并重建您的项目。

    在目标 c 文件中使用您的 swift 文件。

    在这种情况下,请先在 swift 文件中的类前写上“@objc”。

    然后,在你的目标c文件中,写下这个,

      #import "YourProjectName-Swift.h"
    

    在 swift 文件中使用你的目标 c 文件。

    在这种情况下,在你的头文件中,写下这个,

      #import "YourObjective-c_FileName.h"
    

    希望对你有帮助。

    【讨论】:

      【解决方案13】:

      就我而言,除了以下步骤:

      1. 产品模块名称:myproject
      2. 定义模块:是
      3. 嵌入内容包含 Swift:是
      4. 安装 Objective-C 兼容性标头:是
      5. Objective-C 桥接头:$(SRCROOT)/Sources/SwiftBridging.h

      我需要将类设为 public 以创建 productName-Swift.h 文件:

      import UIKit
      
         @objc public class TestSwift: NSObject {
             func sayHello() {
                print("Hi there!")
             }
         }
      

      【讨论】:

        【解决方案14】:

        我刚刚发现将 swift 文件目录添加到项目中是行不通的。您需要先为目录创建一个组,然后添加 swift 文件...

        【讨论】:

        • @;应该定义,然后使用项目将看到这些文件。
        【解决方案15】:

        我遇到了同样的问题,最后似乎它们没有附加到相同的目标上。 ObjC 类附加到 Target1 和 Target2,Swift 类只附加到 Target1,在 ObjC 类内部不可见。

        希望这对某人有所帮助。

        【讨论】:

        • 我完全忽略了这一点,它有不同的分期和生产目标。谢谢你的回答!
        • “附加”是什么意思?
        • "attached" = "members",他们应该被列为目标成员
        【解决方案16】:

        我的问题是我在 xcode 创建桥接文件后卡住了,但我的头文件名 MYPROJECTNAME-swift.h 仍然有错误

        1.我签入终端并搜索所有自动创建的 swift bridge 文件:

        find ~/library/Developer/Xcode/DerivedData/ -name "*-Swift.h"|xargs basename|sort -

        你看看 xcode 创建了什么。

        1. 就我而言,我的项目名称中有空格,xcode 将其替换为 '_'

        【讨论】:

          【解决方案17】:

          当您向项目添加新的 Swift 文件时,请确保将它们添加到正确的目标。 请确保您要使用的每个 swift 文件都继承 NSObject 类并使用 @ObjCMembers 进行注释 在选项 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES 下的构建设置中更改为 YES。 在选项 DEFINES_MODULE 下的构建设置中更改为 YES。

          【讨论】:

            【解决方案18】:

            我有同样的错误:myProjectModule-Swift.h 找不到文件”,但是,就我而言,真正的原因是错误的部署目标: “Swift 在 10.9 之前的 OS X 上不可用;请将 MACOSX_DEPLOYMENT_TARGET 设置为 10.9 或更高版本(当前为 '10.7')” 因此,当我将部署目标更改为 10.9 时 - 项目已成功编译。

            【讨论】:

              【解决方案19】:

              我的问题是 -swift.h 文件的自动生成无法理解 CustomDebugStringConvertible 的子类。我改为将类更改为 NSObject 的子类。之后,-swift.h 文件现在正确地包含了该类。

              【讨论】:

                【解决方案20】:

                我遇到的问题是,我将向我的 Objective-C 桥接头添加类,并且在那些导入的 Objective-C 标头中,他们试图导入 Swift 标头。它不喜欢那样。

                所以在我所有使用 swift 但也被桥接的 Objective-c 类中,关键是确保在标题中使用前向类声明,然后在 . m 文件。

                【讨论】:

                  【解决方案21】:

                  我不必更改构建中的任何设置或将@obj 添加到类中。

                  我所要做的就是创建桥头文件,它是在我将 Swift 类创建到 Objective-c 项目时自动创建的。然后我只需要这样做

                  import "Bedtime-Swift.h"

                  【讨论】:

                    【解决方案22】:

                    好吧,在阅读了所有 cmets 并尝试阅读并再次尝试之后,我设法将 swift 类包含到我的 Big obj-c 项目中。 所以,感谢所有的帮助。 我想分享一个技巧,帮助我更好地理解这个过程。 在 .m 类中,转到 swift 目标名称的导入行 #import "myTargetName-Swift.h" 并点击关键:

                    command + 鼠标点击 -> 跳转到定义

                    在那里你可以看到从 swift 到 obj-c 的所有翻译,然后你会发现在 obj-c 中重新声明的各种函数。 希望这个技巧能像它帮助我一样帮助你。

                    【讨论】:

                      【解决方案23】:

                      在 Objective-C 中使用 Swift 类

                      如果您要在 App Target 中导入代码(在一个项目中混合 Objective-C 和 Swift),您应该使用下一个导入行 #import "&lt;#YourProjectName#&gt;-Swift.h" 将 Swift 代码公开给 Objective-C 代码 [Mixing Swift and Objective-C code in a project]

                      在这篇文章中,我将介绍如何将 Swift 静态库导入到 Objective-C 代码中

                      Objective-C 消费者 -> Swift 静态库

                      Xcode 版本 10.2.1

                      创建 Swift 静态库

                      关注Create Swift static library 后续添加:

                      公开 Swift API。从 Objective-C[About] 使用 Swift 的函数

                      构建后你应该找到一个&lt;product_name&gt;-Swift.h 文件,该文件应该位于DerivedSources [File not found]

                      带有 Swift 静态库的 Objective-C 消费者

                      Drag and drop二进制进入Xcode项目[About]

                      Link Library[Undefined symbols][Link vs Embed]

                      Project editor -> select a target -> General -> Linked Frameworks and Libraries -> add -> Add Others... -> point to `lib<product_name>.a` file
                      //or
                      Project editor -> select a target -> Build Phases -> Link Binary With Libraries -> add -> Add Others... -> point to `lib<product_name>.a` file
                      

                      添加Library Search paths[Library not found for][Recursive path]

                      Project editor -> select a target -> Build Settings -> Search Paths -> Library Search paths -> add path to the parent of `lib<product_name>.a` file
                      

                      添加Header Search Paths[Module not found][Recursive path]

                      Project editor -> select a target -> Build Settings -> Search Paths -> Header Search Paths -> add path to generated `<product_name>-Swift.h` file 
                      

                      将空的.swift file添加到Objective-C项目。[Undefined symbols]当Xcode询问时按创建Bridging Header(它将创建module_name-Bridging-Header.h)并在

                      中设置此文件的路径
                      Project editor -> select a target -> Build Settings -> Swift Compiler - General -> Objective-C Bridging Header
                      

                      将模块导入Objective-C客户端代码[File not found][module_name]

                      #import "module_name-Swift.h"
                      

                      More examples here

                      【讨论】:

                        【解决方案24】:

                        XCode 11.3.1:

                        当我想在 objc 代码中使用 Swift 内部类时,它不会为错误“未定义符号”编译(对于麻烦的内部类和外部类),我检查了生成的“-swift.h " 标题和两个类都在那里。

                        尝试了几个小时后,我将内部类转换为普通类并编译。

                        我清理项目,删除 DerivedData 文件夹并编译。

                        【讨论】:

                        • 你是否尝试在内部类的声明前添加@objc
                        • 感谢@dnnagy,确认不是语法问题。
                        【解决方案25】:

                        我使用 CocoaPods 并且无法从示例应用程序的 Objective-C 代码中找到我的库中的 Swift 类,因为它的项目和目标与库命名相同,所以我不得不删除 Objective-C Generated Interface Name值,因此它们不会与库中的值冲突。

                        【讨论】:

                          【解决方案26】:

                          完成上述所有操作后,我仍然遇到错误。我的问题最终是我需要的 Swift 文件由于某种原因没有添加到捆绑资源中。

                          我通过转到 [MyTarget] > Build Phases > Copy Bundle Resources 解决了这个问题,然后单击加号按钮并添加了 Swift 文件。

                          【讨论】:

                          • 复制捆绑资源不应包含源代码
                          猜你喜欢
                          • 2017-12-15
                          • 2015-03-22
                          • 2016-06-13
                          • 2021-09-26
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多