【问题标题】:How to invoke a Swift class in a Objective-C file imported in a Swift project?如何在 Swift 项目中导入的 Objective-C 文件中调用 Swift 类?
【发布时间】:2017-12-28 03:58:36
【问题描述】:

It's not a dup of this question
我将 Objective-C 文件导入到 Swift 项目中。但是有一个登录控制器有一个调用 AppDelegate 的回调。
但是 AppDelegate 是一个 Swift 文件。 根据Apple's guideline,我添加了一个ExampleProject-Swift.h头文件,然后在登录控制器中导入这个头文件。 但这似乎不是正确的方法。

AppDelegate.swift 文件中

下面的代码是我在ExampleProject-Swfit.h 标头中所做的。

#ifndef ExampleProject_swift_h
#define ExampleProject_swift_h

#import "AppDelegate.swift"
#endif /* ExampleProject_swift_h */

顺便说一句,要使用 Objective-C 文件,我已经创建了一个 ExampleProject-Bridging-Header.h
我不知道这里到底发生了什么,有人知道如何解决这个问题吗?
感谢您阅读我的问题。

【问题讨论】:

标签: ios objective-c swift


【解决方案1】:

ExampleProject_Swift.h 文件由编译器自动生成,因此您不应添加自己的文件。

此外,在您创建的头文件中,您导入了一个 Swift 源文件,就好像它是一个 Objective C 头文件一样,编译器不会理解这一点。这就是为什么您在 LoginViewController 实现文件中得到所有这些奇怪错误的原因。

【讨论】:

  • 这行得通。谢谢你,兄弟。但我遇到了另一个问题。我有一些全局宏,要在 swiftI 中使用它们,我在 swift 文件中创建了一些全局 let 变量,但 Objective-C 文件找不到这些变量。我还应该做什么?另外,在旧的Objective-C项目中,我做了一个PreFixHeader.pch来导入一个包含这些宏的文件。
  • Swift 编译器只处理非常简单的宏。如果你想让你的 Swift 变量对 Objective C 可见,你需要将它们公开。
  • 是的,我成功了。默认内部访问级别正在运行。根据 Apple 的文档,自动创建的 Swift 标头将包含标有 internal 修饰符的标头,如果有一个 Objective-C 桥接头标头。感谢您的帮助,我对所有这些迁移问题感到非常困惑。
猜你喜欢
  • 2018-07-04
  • 2015-10-27
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多