【问题标题】:Retrieving values from an empty array从空数组中检索值
【发布时间】:2014-10-03 21:11:51
【问题描述】:

我希望用户上传一张图片,而其他用户则回复该图片。到目前为止一切正常,除非该特定图像对象的行为空,应用程序崩溃。

fatal error: unexpectedly found nil while unwrapping an Optional value

这是我的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    var error = ""

    var query = PFQuery(className:"Posts")
    query.getObjectInBackgroundWithId(cellID) {
        (objects: PFObject!, error: NSError!) -> Void in
        if error == nil {      
            var array = objects.objectForKey("replies") as [String] // <- when error occurs the compiler point here.
            for object in  array {
                self.repliesArray.append(object as String)
            }
        } else { 
            self.displayError("Error", error: "Error retreiving")
        }
        self.tableView.reloadData()
    }
}

【问题讨论】:

    标签: arrays swift parse-platform


    【解决方案1】:

    这行得通吗?您不能将 null 对象附加到数组,因此这会附加一个空字符串而不是 null。此外,您还需要解释标记,以便它可以为零。

    var array = objects.objectForKey("replies") as [String!]
    for object in array {
        if object != nil {
            self.repliesArray.append(object as String)
        }
        else {
            self.repliesArray.append("")
        }
    }
    

    【讨论】:

    • 给出一个错误,尝试了很多不同的 If 语句,但一直给我同样的错误。
    • 错误:类型“NSString”不符合协议“NilLiteralConvertible”
    【解决方案2】:
    query.getObjectInBackgroundWithId(cellID) {
        (objects: PFObject!, error: NSError!) -> Void in
        if error == nil {      
            var array = objects.objectForKey("replies") as [String] // <- when error occurs the compiler point here.
    

    这里的关键是您接受了一个隐式解包的可选项 (PFObject!),这意味着它永远不会是 nil,而是 nil

    理想情况下 (*),类型应该是 (objects: PFObject?, error: NSError?) -&gt; Void 以使选项显式并强制您执行所需的 nil 检查。我相信即使调用者声称给你发送(PFObject!, NSError!) -&gt; Void,你也可以这样做,因为我认为 Swift 会为你进行隐式->显式转换。

    如果这仍然不可能,那么您必须在使用之前手动验证 objects 不是 nil。 (这与@Dehli 的解决方案不同,它检查objects包含 的东西是否非nil。这不是问题;问题是objects 本身就是nil。 )

    (*) 我这里用现有接口说“理想”。传递可选值/错误的元组是一种糟糕的模式。更好的解决方案是使用 Result object 之类的东西。

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多