如何解析Swift 4中的描述数组?

我正在学习Swift 4 ,我有一个输出数组的基本64描述的算法,如下所示:

 extension String { func fromBase64() -> String? { guard let data = Data(base64Encoded: self) else { return nil } return String(data: data, encoding: .utf8) } func toBase64() -> String { return Data(self.utf8).base64EncodedString() } } let output = [1, 2, 4, 65].description.toBase64() print(output.fromBase64()) // "[1, 2, 4, 65]" 

现在,我的问题是我需要在Array中返回Array ,而不是String 我在互联网上查了一下,但我找不到这种类型数组的解析方法(他们都在讨论JSON)。

以下是将字符串转换为Int数组的方法:

 var toString = output.fromBase64() //"[1, 2, 4, 65]" if let str = toString { let chars = CharacterSet(charactersIn: ",][ ") let split = str.components(separatedBy: chars).filter { $0 != "" }.flatMap { Int($0)} print(split) //[1, 2, 4, 65] } 

您不应该依赖description方法来生成特定的可预测输出,最好为此目的使用JSON编码器(例如下面的例子)。

话虽如此, "[1, 2, 4, 65]"恰好是一个有效的JSON数组,JSON解码器可以将其解析回整数数组:

 let output = "[1, 2, 4, 65]" do { let array = try JSONDecoder().decode([Int].self, from: Data(output.utf8)) print(array) // [1, 2, 4, 65] } catch { print("Invalid input", error.localizedDescription) } 

下面是一个独立的示例,您可以如何可靠地对整数数组进行编码和解码到Base64编码的字符串。

 // Encode: let intArray = [1, 2, 4, 65] let output = try! JSONEncoder().encode(intArray).base64EncodedString() print(output) // WzEsMiw0LDY1XQ== // Decode: let output = "WzEsMiw0LDY1XQ==" if let data = Data(base64Encoded: output), let array = try? JSONDecoder().decode([Int].self, from: data) { print(array) // [1, 2, 4, 65] } else { print("Invalid input") }