【问题标题】:Unexpectedly found nil when unwrapping an Optional value展开 Optional 值时意外发现 nil
【发布时间】: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] 类型。
  • 从不(强制)将字典转换为特定类型。注释类型let dicc : [String : String] = [ ... 然后你会得到一个编译器错误,这会导致你遇到问题

标签: ios swift xcode alamofire


【解决方案1】:

首先,你说 dicc 是一个 [String: String] 字典,但你的 createByDicc 不是一个字符串,它是另一个字典。所以你的 dicc 应该是 [String: Any]。

其次,永远不要强行打开选项是一个很好的做法。尝试执行 if letguard 语句并保存值或仅使用 Nil Coalescing:self.message ?? ""

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多