如何解码 Swift 5 版本?

Posted

技术标签:

【中文标题】如何解码 Swift 5 版本?【英文标题】:How to decode Swift 5 version? 【发布时间】:2020-10-28 02:27:36 【问题描述】:

Decode base64URL to base64 -- Swift/Decoding JSON array with codable - Swift 5

我尝试通过参考这两篇文章来做到这一点。但这与我正在尝试做的非常不同。

我引用的其他代码

let base64decryptData = NSMutableData(base64EncodedString: encodeBase64String, options: NSDataBase64DecodingOptions.allZeros)
let decodeBase64String: NSString = NSString(data: base64decryptData!, encoding: NSUTF8StringEncoding)!
    NSLog("Base64 decoding : %@", decodeBase64String)

这与我正在尝试做的最相似,但我不知道语法是否发生了很大变化,因为它是 2015 年的文本,或者我是否找到了错误的解决方案,所以我在问一个问题。

总结一下,我想把图片这样的代码解码成base64,作为简洁的代码使用。如果你能告诉我怎么做,我将不胜感激(这是非常little of the code的捕获。)

我的代码

if let httpResponse = response as? HTTPURLResponse 
   print( httpResponse.allHeaderFields )
                                
   guard let data = data else return
                
   let decoder = JSONDecoder()
                
   struct UserData: Codable 
          let userId: String?
          let profile: String?
   
                    
   do 
      let userData = try decoder.decode(UserData.self, from: data)
      DispatchQueue.main.async 
          let ad = UIApplication.shared.delegate as? AppDelegate
          ad?.paramProfile = userData.profile
          
          let base64decryptData = NSMutableData(base64EncodedString: ad?.paramProfile ?? "", options: NSData.Base64DecodingOptions) // ERROR[Cannot convert value of type 'NSData.Base64DecodingOptions.Type' to expected argument type 'NSData.Base64DecodingOptions']
          let decodeBase64String: NSString = NSString(data: base64decryptData!, encoding: NSUTF8StringEncoding)!
          print("AppDelegate - paramProfile : ",decodeBase64String )
     

    catch 
       print("Error:\(error)")
              

AppDelegate

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate 

    var paramId: String?
    var paramProfile: String?

代码说明:创建随机值UserData后,与AppDelegate中的值连接后转换为data64

【问题讨论】:

错误很明显。您需要传递枚举选项而不是其类型。 NSMutableData(base64Encoded: "", options: .ignoreUnknownCharacters) 和初始化参数已重命名为 base64Encoded 但正如 Matt 所提到的,在 Swift 中编码时应该使用 Swift 本机类型。只是不要强行打开结果 【参考方案1】:

不要使用 NSString。不要使用 NSMutableData。不要使用 NSLog。这是 Swift,而不是 Objective-C。使用数据。

解码 Base 64 编码的字符串示例:

let s = "d2VsbCBob3dkeSB0aGVyZQ=="
let d = Data(base64Encoded: s)!
let s2 = String(data: d, encoding: .utf8)!
print(s2) // well howdy there

这可能与您尝试执行的操作不同(我无法弄清楚您尝试执行的操作),但它应该可以帮助您入门。只需查阅有关数据的文档。

【讨论】:

我会从头解释问题的内容。我正在使用 urlsession 与服务器通信。我想把服务器给的长字符值改成base64解码,改成视觉可识别的值。 这就是你刚刚留下的评论的答案。 首先,我会参考苹果的文档,按照你告诉我的方式进行更改。谢谢 但是如何做到这一点取决于编码的具体内容。

以上是关于如何解码 Swift 5 版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 5.2-Xcode 版本 11.5 上覆盖 func observeValueForKeyPath

如何在 swift5 和 Alamofire 5 beta 版本中获取和保存响应?

将 NSDictionary 与内部函数解码为 swift 对象的值

Swift 5 中未更新应用程序版本和内部版本号

Swift 5 默认可解码实现,只有一个例外

如何在 PHP 5.1 中解码 json?