有人在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,您就可以访问它的所有属性。