Swift 1.2
let apiLoginString = NSString(format: "%@:%@", API_USERNAME, API_PASSWORD);
let apiLoginData: NSData = apiLoginString.dataUsingEncoding(NSUTF8StringEncoding)!;
var base64ApiLoginString = apiLoginData.base64EncodedStringWithOptions(nil);
Run Code Online (Sandbox Code Playgroud)
斯威夫特2
let apiLoginString = NSString(format: "%@:%@", API_USERNAME, API_PASSWORD);
let apiLoginData: NSData = apiLoginString.dataUsingEncoding(NSUTF8StringEncoding)!;
var base64ApiLoginString = apiLoginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions());
Run Code Online (Sandbox Code Playgroud)
这两种方法产生不同的结果.在Swift 2中,我们不能再通过nil了;
apiLoginData.base64EncodedStringWithOptions(nil);
Run Code Online (Sandbox Code Playgroud)
我也试过NSDataBase64EncodingOptions.Encoding64CharacterLineLength在Swift 2中传入.但结果仍然是不同的
有什么想法吗?
更新2:这不是Swift 1.2或Swift 2的问题.奇怪的是,这两个打印出不同的结果..什么F!
更新3:事实证明,正如Martin指出的那样,我的API_USERNAME变量中有一些不可见的字符
class RequestHelper: NSObject {
static var API_USERNAME: NSString = "???abc";
static var API_PASSWORD: NSString = "123";
static var USERNAME: NSString = "abc"
static var PASSWORD: NSString = "123"
class func signUpUser() {
//Base64
var loginString = NSString(format: "%@:%@", USERNAME, PASSWORD);
var loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!;
var base64LoginString = loginData.base64EncodedStringWithOptions([]);
print("BASE 64 \(base64LoginString)");//RESULT YWJjOjEyMw==
let apiLoginString = NSString(format: "%@:%@", API_USERNAME, API_PASSWORD);
let apiLoginData: NSData = apiLoginString.dataUsingEncoding(NSUTF8StringEncoding)!;
var base64ApiLoginString = apiLoginData.base64EncodedStringWithOptions([]);
print("BASE 64 \(base64ApiLoginString)");// RESULT IS 4oGg4oGg4oGgYWJjOjEyMw==
}
Run Code Online (Sandbox Code Playgroud)
与Swift 2.0中的日历组件错误或Swift 2.0类似- 二进制运算符"|" 不能应用于两个UIUserNotificationType操作数,
NSDataBase64EncodingOptions是一个OptionSetType在Swift 2中.它提供了一个类似于set的接口,可以从数组文字初始化.
因此有效的选项将是:
base64EncodedStringWithOptions([]) // no options
base64EncodedStringWithOptions([.Encoding64CharacterLineLength])
base64EncodedStringWithOptions([.Encoding64CharacterLineLength, .EncodingEndLineWithCarriageReturn])
Run Code Online (Sandbox Code Playgroud)
完整示例:
let apiLoginString = NSString(format: "%@:%@", "user", "password")
let apiLoginData = apiLoginString.dataUsingEncoding(NSUTF8StringEncoding)!
let base64ApiLoginString = apiLoginData.base64EncodedStringWithOptions([])
print(base64ApiLoginString)
// dXNlcjpwYXNzd29yZA==
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4542 次 |
| 最近记录: |