【问题标题】:Unexpectedly found nil while unwrapping an Optional value在展开可选值时意外发现 nil
【发布时间】:2014-08-19 23:50:26
【问题描述】:

可能我没看清楚可选值:

class func albumsWithJSON(allResults: NSArray) -> [Album] {
    var albums = [Album]()
    if allResults.count>0 {
        for result in allResults {
            var name = result["trackName"] as? String
            if name == nil {
                name = result["collectionName"] as? String
            }

            var price = result["formattedPrice"] as? String
            if price == nil {
                price = result["collectionPrice"] as? String
                if price == nil {
                    var priceFloat: Float? = result["collectionPrice"] as? Float
                    var nf: NSNumberFormatter = NSNumberFormatter()
                    nf.maximumFractionDigits = 2;
                    if priceFloat != nil {
                        price = "$"+nf.stringFromNumber(priceFloat)
                    }
                }
            }

            let thumbnailURL = result["artworkUrl60"] as String
            let imageURL = result["artworkUrl100"] as String
            let artistURL = result["artistViewUrl"] as? String

            var itemURL = result["collectionViewUrl"] as? String
            if itemURL == nil {
                itemURL = result["trackViewUrl"] as? String
            }

            var newAlbum = Album(name: name!, price: price!, thumbnailImageURL: thumbnailURL, largeImageURL: imageURL, itemURL: itemURL!, artistURL: artistURL!)
            albums.append(newAlbum)
        }
    }
}

在这一行,我得到“在展开可选值时意外发现 nil”错误:

var newAlbum = Album(name: name!, price: price!, thumbnailImageURL: thumbnailURL, largeImageURL: imageURL, itemURL: itemURL!, artistURL: artistURL!)

显然 JSON 中缺少一些信息,但我该如何处理缺失值?

【问题讨论】:

    标签: swift


    【解决方案1】:

    所有错误意味着您传递给该函数的值之一是 nil。当您将 ! 放在这些值的末尾时,它会展开它。如果在展开时该值为 nil,则会引发异常。

    解决此问题的方法取决于 nil 值的重要性。如果您不能与nil 中的任何一个一起生活,那么您将不得不检查 nil 并做一些事情。如果您可以让它们为零,那么您需要确保该函数接受 nil 值。

    为了更好地理解选项,您应该阅读文档:https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-XID_483

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-23
      • 2016-10-18
      • 2017-04-09
      • 2018-09-22
      • 2016-06-26
      • 2016-03-12
      • 2021-12-30
      相关资源
      最近更新 更多