Ios NSString-to-String投掷;致命错误:在展开可选值“时意外发现nil”;
以下Swift代码在return语句上崩溃,出现以下错误: 致命错误:在展开可选值时意外发现nil 根据调试器,结果变量具有非空值。我真的希望函数接受字符串并返回字符串,而不是NSData。希望这是一个愚蠢的问题,而我只是没有看到它。我被困在这上面好几个小时了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
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,则返回空字符串或进入下一步。