展开 Optional 值时意外发现 nil
Posted
技术标签:
【中文标题】展开 Optional 值时意外发现 nil【英文标题】:Unexpectedly found nil when unwrapping an Optional value 【发布时间】:2018-03-19 21:07:35 【问题描述】:我正在执行以下代码:
let createByDicc = [
"nickname" : self.createdBy?.nickname,
"avatar" : self.createdBy?.avatar,
"id" : self.createdBy?.id
] as! [String : String]
let dicc = [
"channelId" : self.channelId!,
"createBy" : createByDicc,
"message" : self.message!,
"type" : "message",
"replyTo" : "nmartello"
] as! [String : String]
我很肯定我使用的所有变量都不为空(self.createdBy?.nickname 等已分配了一个字符串)。如果我注释掉
"createBy" : createByDicc'
它工作得很好,但如果不是我得到 Unexpectedly found nil when unwrapping an Optional value 。我需要在 Dictionary 中使用此 Dictionary 来获取我需要使用 Alamofire 调用的 WS 的有效负载,但我不确定这里有什么问题。有什么想法吗?
【问题讨论】:
还...dicc
应该是 [String:Any]
,因为您正在其中加载字典
检查createByDicc
的定义,因为它没有被赋值
self.createdBy
(尤其是id
)的所有属性都包含字符串吗?看起来 createByDicc
无法转换为 [String: String]
类型。
What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?的可能重复
从不(强制)将字典转换为特定类型。注释类型let dicc : [String : String] = [ ...
然后你会得到一个编译器错误,这会导致你遇到问题
【参考方案1】:
首先,你说 dicc 是一个 [String: String] 字典,但你的 createByDicc 不是一个字符串,它是另一个字典。所以你的 dicc 应该是 [String: Any]。
其次,永远不要强行打开选项是一个很好的做法。尝试执行 if let
或 guard
语句并保存值或仅使用 Nil Coalescing:self.message ?? ""
【讨论】:
以上是关于展开 Optional 值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中播放音乐:在展开 Optional 值时意外发现 nil
Swift 致命错误:在 segue 上展开 Optional 值时意外发现 nil
在NSCoder中展开Optional值时,意外地发现了nil
iOS/Xcode:Koloda 框架:在隐式展开 Optional 值时意外发现 nil
Book (Swift for Dummies) 第 4 章练习:致命错误:在展开 Optional 值时意外发现 nil
为啥我在尝试在 iOS Swift 中向服务器发出 post 请求时收到此错误:在展开 Optional 值时意外发现 nil?