NSString 到 String 抛出“致命错误:在展开可选值时意外发现 nil”
Posted
技术标签:
【中文标题】NSString 到 String 抛出“致命错误:在展开可选值时意外发现 nil”【英文标题】:NSString to String throwing "fatal error: unexpectedly found nil while unwrapping an Optional value" 【发布时间】:2015-06-25 20:39:22 【问题描述】:以下 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
【问题讨论】:
您正在显式解包(使用!
)所有应该检查的 let/vars 是否为 nil,因此会出现解包错误。如果值为 nil,则返回一个空字符串或继续下一步。
【参考方案1】:
您不能指望能够将任意数据转换为具有 UTF-8 编码的 NSString。例如,UTF-8 永远不能包含字节 0xff,因此包含该字节值的数据永远不能转换为 NSString。
所以无论你多么想得到一个 NSString,你都不会得到它。
【讨论】:
【参考方案2】:知道了。我想我错过了大局。目标是将 NSData 转换为十六进制字符串。我在 github 上找到了一个很好的方法:https://github.com/CryptoCoinSwift/SHA256-Swift/blob/master/SHA256.swift
【讨论】:
以上是关于NSString 到 String 抛出“致命错误:在展开可选值时意外发现 nil”的主要内容,如果未能解决你的问题,请参考以下文章
instrumentation.retransformClasses() 抛出致命错误
Swift UITableViewCell detailTextLabel.text 抛出错误“致命错误:无法打开 Optional.None”
致命错误:第 19 行的 C:\xampp\htdocs\register.php 中抛出未捕获的异常“PDOException”