某些 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。
为什么要用这个方法
+ (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。