从Int转换为Hex值,然后将Hex值附加到Data对象后,出现错误Swift吗?

时间:2018-07-30 15:54:24

标签: swift hex decimal nsdata

在尝试将数据对象追加为十六进制值后,我得到了如下代码,但它给了我以下错误:

  

在展开可选值时意外发现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添加到数据对象中。

1 个答案:

答案 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