在尝试将数据对象追加为十六进制值后,我得到了如下代码,但它给了我以下错误:
在展开可选值时意外发现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添加到数据对象中。
答案 0 :(得分:1)
您使用字符串将result
作为十六进制字符串只是将其附加到returnMsg
上是没有用的。只需附加result
。
let n = 585
let result = 255 - n % 256 //182 is result
var returnMsg = "[1,1,1, ,#00300".data(using: .utf8)!
returnMsg.append(UInt8(result))
您的崩溃是由于解开UInt8(hexValue)
导致的。传递字符串b6
会得到nil
的结果,而nil
的强制展开总是会导致崩溃和您看到的错误消息。接受字符串的UInt8
初始化程序仅接受以10为底的整数。您可以在文档中看到这一点:
以
description
传递的字符串可以以加号或减号(+或-)开头,后接一个或多个数字(0-9)。如果
description
的格式无效,或者以10为底的值不能表示,则结果为nil
。