Swift 'if let ... as?' 使用 NSMutableArray 安全解包

Swift 'if let ... as?' safe unwrap with NSMutableArray

我正在学习如何在 Swift 中安全地解包可选值,但是出于某种原因,filteredList[0] 必须在此处返回 nil,因为 if let 语句中代码的 none 是执行。但是,打印 filteredList 可确保 NSMutableArray 中包含某些内容!看起来很简单,但为什么会返回 nil? and/or if let 语句中的代码没有执行?

func filterOutNoItemsInCommon(randomItem: (NSArray) -> NSDictionary, listOfItems: NSArray) -> (NSArray, NSArray, Set<String>) {

var filteredList = NSMutableArray()
var filteredListCounter = 0
var setOfAtt: Set = Set<String>()
var selectedItem = NSArray()
var rank: Int = 0

if let itemArray: NSArray = randomItem(listOfItems)["attributes"] as? NSArray {
    selectedItem = itemArray
    for item in itemArray {
        setOfAtt.insert(item as! String)
    }
}

for number: Int in 0..<listOfItems.count {

    rank = 0

    if let listOfItems = (listOfItems[number]["attributes"] as? NSArray) {
    if let arrayOfItems = listOfItems as? Array<String> {

        if !setOfAtt.isDisjointWith(arrayOfItems) {

            filteredList.addObject(listOfItems[number])

            for ln in arrayOfItems {
                if setOfAtt.contains(ln) {
                    rank++
                }
            }

            var dictForRank: NSMutableDictionary = ["rank": rank]
            println(dictForRank)
            println("TEST\(filteredList[0])")
            // this is where the code doesn't execute
            if let thisIsAnArray = filteredList[0] as? NSMutableArray {
                println("TEST123")
                println(thisIsAnArray)
                filteredList[filteredListCounter].addObject(dictForRank)
            }

            filteredListCounter++
        }
    }
    }

}

return (filteredList, selectedItem, setOfAtt)
}

对象是 NSDictionaryNSMutableDictionary,而不是 NSMutableArray,因此安全向下转换失败。

您认为是 nil 的推理是不正确的; nil 不兼容的类型将导致安全 unwrap/downcast 失败。