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

问题描述 投票:0回答:2

我正在学习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,而不是String。我在互联网上查了一下,但我找不到这种类型数组的解析方法(他们都在讨论JSON)。

ios arrays json swift parsing
2个回答
0
投票

以下是将字符串转换为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]
}

3
投票

您不应该依赖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")
}
© www.soinside.com 2019 - 2024. All rights reserved.