某些 Objective-C 方法在 Swift 中不可见 3

Some Objective-C methods are invisible in Swift 3

为什么要用这个方法 + (instancetype)arrayWithNSData:(NSData *)data;

j2obj 项目中

https://github.com/google/j2objc/blob/master/jre_emul/Classes/IOSPrimitiveArray.h#L252

Swift3 不可见?

但其他的是可见的。 例如这个:

+ (instancetype)newArrayWithBytes:(const jbyte *)buf count:(NSUInteger)count;

ObjC 中的工厂方法——即 class 方法 return instancetype(或 class 的实际类型)并以通用名称开头class — 作为初始值设定项导入到 Swift。

因此,名称包含 Array 的 class 上的方法 +(instancetype)arrayWithSomething: 被导入为 init(something:)。在您的例子中,+arrayWithNSData: 将被导入为 init(nsData:)。 (您可能认为它会删除 "NS",因为它还会将参数类型从 NSData 转换为其等效的 Swift 值类型 Foundation.Data... 但它没有。)

要找到这个和其他导入器效果,您可以通过查看源的 "Generated Interface" 视图在 Xcode 中亲自查看结果。查看跳转栏左侧的相关项目按钮,或辅助编辑器。

有关详细信息,请阅读 Apple 的 Using Swift with Cocoa and Objective-C 文档中的 Initialization