Objective c 在swift-3中访问NS类型类别

Objective c 在swift-3中访问NS类型类别,objective-c,swift3,Objective C,Swift3,我已经用Obj-C编写了NSData类别的base64编码 @interface NSData (Base64) + (NSData*)dataFromBase64String:(NSString*)aString; - (NSString*)base64EncodedString; @end 最初在Swift 2.2中,我将其用作: let dbPassData = NSData(fromBase64String: password) 现在,在Swift 3中,没有任何NSData,而

我已经用Obj-C编写了
NSData
类别的
base64编码

@interface NSData (Base64)

+ (NSData*)dataFromBase64String:(NSString*)aString;
- (NSString*)base64EncodedString;

@end
最初在Swift 2.2中,我将其用作:

let dbPassData = NSData(fromBase64String: password)
现在,在Swift 3中,没有任何
NSData
,而是有
数据

如何在swift 3中使用这些分类方法?


将project转换为Swift 3后,它将该行转换为:

let dbPassData = Data(fromBase64String: password)
这会产生一个错误:

参数标签与任何可用重载都不匹配


在Swift 3中,苹果还重命名了一些初始值设定项,Xcode 8 beta在从2.2转换为3时犯了一些错误

在这种情况下,初始值设定项被重命名为:

let data = Data(base64Encoded: "hello")


当你面临这样或类似的问题时,你可以开始键入
ClassName(
并查看建议的初始值设定项。在大多数情况下,你会很容易找到新的初始值设定项。

在Swift 3中,苹果也重命名了一些初始值设定项,Xcode 8 beta在从2.2转换到3时会犯一些错误

在这种情况下,初始值设定项被重命名为:

let data = Data(base64Encoded: "hello")


当您遇到此问题或类似问题时,可以开始键入
ClassName(
并查看建议的初始值设定项。在大多数情况下,您会很容易找到新的初始值设定项。

NSData
在Swift 3中仍然可用,就像
String
NSString
共存一样。在这种情况下,您需要忽略编译器的建议:

let dbPassData = NSData(fromBase64String: password) as Data
这假设您不想将您的
Base64
类别移植到Swift,或者您想保持与Obj-C代码的兼容性。Swift 3的
数据
还提供内置的Base64转换:

let dbPassData   = Data(base64Encoded: password)
let base64String = data.base64EncodedString(options: [.lineLength64Characters, .endLineWithLineFeed])

NSData
在Swift 3中仍然可用,就像
String
NSString
共存一样。在这种情况下,您需要忽略编译器的建议:

let dbPassData = NSData(fromBase64String: password) as Data
这假设您不想将您的
Base64
类别移植到Swift,或者您想保持与Obj-C代码的兼容性。Swift 3的
数据
还提供内置的Base64转换:

let dbPassData   = Data(base64Encoded: password)
let base64String = data.base64EncodedString(options: [.lineLength64Characters, .endLineWithLineFeed])