Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSString-to-String投掷;致命错误:在展开可选值“时意外发现nil”;_Ios_Swift_Hmac_Sha256 - Fatal编程技术网

Ios NSString-to-String投掷;致命错误:在展开可选值“时意外发现nil”;

Ios NSString-to-String投掷;致命错误:在展开可选值“时意外发现nil”;,ios,swift,hmac,sha256,Ios,Swift,Hmac,Sha256,以下Swift代码在return语句上崩溃,出现以下错误: 致命错误:在展开可选值时意外发现nil 根据调试器,结果变量具有非空值。我真的希望函数接受字符串并返回字符串,而不是NSData。希望这是一个愚蠢的问题,而我只是没有看到它。我被困在这上面好几个小时了 println(hmac_sha256("sample_data", inKey: "sample_key")) func hmac_sha256(inData: String, inKey: String) -> (St

以下Swift代码在return语句上崩溃,出现以下错误:

致命错误:在展开可选值时意外发现nil

根据调试器,结果变量具有非空值。我真的希望函数接受字符串并返回字符串,而不是NSData。希望这是一个愚蠢的问题,而我只是没有看到它。我被困在这上面好几个小时了

println(hmac_sha256("sample_data", inKey: "sample_key"))

    func hmac_sha256(inData: String, inKey: String) -> (String) {

         let data: NSData = inData.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
         let key: NSData = inKey.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!

         var result = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH))

         CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256), key.bytes, size_t(key.length), data.bytes, size_t(data.length), result!.mutableBytes)

         return NSString(data: result!, encoding: NSUTF8StringEncoding) as! String
     }

您不能期望能够使用UTF-8编码将任意数据转换为NSString。例如,UTF-8永远不能包含字节0xff,因此包含该字节值的数据永远不能转换为NSString


所以,无论你多么想得到一个NSString,你都不会得到它

明白了。我想我错过了大局。目标是将NSData转换为十六进制字符串。我在github上找到了一个很好的方法:

您正在显式地展开(使用
)所有这些let/vars您应该检查它们是否为零,因此展开错误。如果值为nil,则返回空字符串或进入下一步。