2017-07-24 72 views
0

我想数组字符串的base64,然后回串斯威夫特 - 阵列数据并返回字符串

我尝试以下

let array = [[1,2,"preved"], [3,4,"hola"], [5,6,"poka"]] 

let encodedData = NSKeyedArchiver.archivedData(withRootObject: array) 

let base64String = encodedData.base64EncodedString() 

let data = Data(base64Encoded: base64String) 
let decodedData = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 
print(decodedData) 

问题是,回零

decoded data打印

我在做什么错?

+1

你缺少NSKeyedArchiver'的'反向=>'NSKeyedUnarchiverArchiver'。 – Larme

+2

它返回零,因为你是base64编码NSString的数据,但试图使用普通的NSString初始化构造它。找回列使用数据.base64EncodedString() – firstinq

+0

替换创建decodedData从的NSString 如果让数据=数据!(base64Encoded:base64String){ 让decodedData = NSKeyedUnarchiver.unarchiveObject(附:数据) 打印(decodedData) } –

回答

2

当使用NSKeyedArchiver编码器,NSKeyedUnarchiver解码器应还用于:

的NSKeyedArchiver,NSCoder的具体子类,提供了一种方法 编码对象(和标量值)到一个体系结构无关 格式可以存储在一个文件中。归档一组 对象时,每个对象 的类信息和实例变量将写入归档。 伴侣类NSKeyedUnarchiver 解码档案中的数据并创建一组等同于原始组的对象。

- 在简单的way-如下:

let array = [[1,2,"preved"], [3,4,"hola"], [5,6,"poka"]] 

let encodedData = NSKeyedArchiver.archivedData(withRootObject: array) 

if let decodedArray = NSKeyedUnarchiver.unarchiveObject(with: encodedData) as? [Any] { 
    // ... 
} 

注意,因为array数据类型是[Array<Any>],你应该将它转换为[Any]