? В остальном, JSON, Encodable, Plist, CSV, NSCoding, это не имеет значения, это зависит от цели использования (поделиться им, «зашифровать это» и т. Д.), А затем использовать лучшее решение для использования. ,

сь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).

 Martin R18 дек. 2017 г., 08:38
Вы не должны полагаться наdescription метод для получения конкретного выхода.

Ответы на вопрос(2)

Решение Вопроса

Вот как вы можете конвертировать вашу строку в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")
}
 Larme18 дек. 2017 г., 10:44
You should not rely on the description method to produce a particular predictable output Очистить что-то, чтобы выделить. Кто сказал, что в следующем выпуске iOS Apple не изменитdescription? В остальном, JSON, Encodable, Plist, CSV, NSCoding, это не имеет значения, это зависит от цели использования (поделиться им, «зашифровать это» и т. Д.), А затем использовать лучшее решение для использования. ,

Ваш ответ на вопрос