{Module_name}-Swift.h 文件不能很好地工作,仅在 Swift 4 项目中运行良好,不像 Swift



有人在Swift 4项目的文件中遇到{Module_name}-Swift.h问题吗?我注意到-Swift.h自动生成的文件与Swift 4语法不同Swift 3.2无法很好地工作!

例如,-Swift.h文件不包含在从NSObject类继承的自定义 Swift 类中实现的所有变量和方法!

我已经使用了@objc@class关键字,但没有办法。

  • 我没有收到任何错误! 问题是如果我创建了一个这样的类:
import Foundation
class Utils: NSObject {
let abc: String?
func xyz() { 
print("")
}
}

并导航到{Module_name}-Swift.h我看到类似的东西:

SWIFT_CLASS("_TtC3{Module_name}5Utils") 
@interface Utils : NSObject 
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; 
@end

问题

let abc: String?func xyz()从未包含在{Modue_name}-Swift.h文件中!

我认为在 Swift 4 中,你必须标记更多的东西@objc(不再隐含),但除此之外,它应该在那里。

你们都可以检查它以确认.h文件中的类名,例如:

@class文件名;

生成的文件{Module}-Swift.h不包含变量和方法,生成的文件是为了让您访问模块命名空间。

生成的模块的实际接口位于Module.swiftmodule/arm64.swiftmodule(取决于构建的体系结构)。

有关其内容的更多信息:

  • https://bugs.swift.org/browse/SR-2502
  • https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20160111/000827.html
  • https://stackoverflow.com/a/24396175/1755720

然而。。。该格式未在任何地方记录,可能会发生变化。一个好的起点是查看include/swift/Serialization/ModuleFormat.h


至于为什么它不起作用 - Swift 4 有一个迁移过程,请确保您已遵循它:https://swift.org/migration-guide-swift4/

Xcode会拾取大多数东西...但它不会得到一切!

为什么 Swift 类需要头文件?您只需将 swift 类标记为 @objc,您就可以访问它的所有属性。

相关内容

  • 没有找到相关文章

最新更新