【发布时间】:2018-07-30 15:54:24
【问题描述】:
在尝试附加数据对象转换为十六进制值后,我有如下代码,但它给了我以下错误:
在展开可选值时意外发现 nil
let n = 585
let result = 255 - n % 256 //182 is result
let hexValue = String(result, radix: 16) //b6 is result
var returnMsg = "[1,1,1, ,#00300".data(using: .utf8) as! Data
returnMsg.append(UInt8(hexValue)!)
我在这里尝试将 b6 添加到数据对象。
【问题讨论】:
-
一些想法:
let intValue = UInt8("b6")这将返回nil。这似乎合乎逻辑。这就是它崩溃的原因,因为那时UInt8(hexValue)为零,并且您使用!强制对其展开。你为什么使用String?只做returnMsg.append(result)怎么样?但是现在出现了一个问题,因为您不能像这样将 Int (UInt8) 附加到Data对象。 -
我无法复制该问题。在将代码的前四行添加到新项目的
viewDidLoad并添加一个简单的print(returnMsg)后产生“15 个字节”,但在append上编译错误。但是...我现在看到一个左引号(对于字符串?)可能放错了位置,并且在它里面有一个左括号(对于一个数组?)没有右引号。你有没有机会错误发布你的代码?总而言之,"[1,1,1, ,#00300".data(using: .utf8)"在语法上正在编译,但没有(至少是右括号。