簡體   English   中英

如何使用swift3從MutableArray獲取排序的字典

[英]How to get sorted Dictionary from MutableArray using swift3

我設法從數據庫中創建字典,以在tableview添加節。

我的函數將數據庫放入數組,並將數組放入字典(A:Aname1,Aname2,B:Bname1,Bname2 ...)。 當我對字典進行排序時,返回值是[String,[String]]類型,我需要將其設為[String:[String]],當我不使用sort操作時,會出現以下錯誤:

線程1:EXC_BAS_INSTRUCTION(代碼= EXC_I386_INVOP,子代碼= 0x0)

在控制台中:

致命錯誤:解開可選值(lldb)時意外發現nil

我的代碼:

class SectionData {

    var marrCrimesNames : NSMutableArray!

    func getCrimesNames() {
        marrCrimesNames = NSMutableArray()
        marrCrimesNames = ModelManager.getInstance().getAllCrimesNames()
    }

    func getSectionsFromData() -> [String: [String]] {

        var sectionDictionary =  [String: [String]]()

        let crime: CrimesInfo = (marrCrimesNames.object(at: 0) as! CrimesInfo) // Thread1:EXC_BAS_INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0)
        _ = crime.Name
        var firstLetter: [String] = []

        for crime in marrCrimesNames {
            firstLetter.append((crime as AnyObject).Name)
        }

        let characters = Array(Set(firstLetter.flatMap({ $0.characters.first })))

        for character in characters.map({ String($0) }) {
            sectionDictionary[character] = firstLetter.filter({ $0.hasPrefix(character) })
        }

        //var sortedSectionDictionary = sectionDictionary.sorted(by: { $0.key < $1.key })
        // sort action return [String, [String]]

        return sectionDictionary
    }

}

錯誤是您假定該值返回: let crime: CrimesInfo = (marrCrimesNames.object(at: 0) as! CrimesInfo)已設置。

該錯誤清楚地表明它沒有被設置並返回nil 所以檢查一下:

if let crime = marrCrimesNames.object(at: 0) {
   // Here you can safely use crime ;)
}

你需要兩檢查兩件事

  1. 首先檢查marrCrimesNames!= nil,然后放一個保護語句檢查nil
  2. marrCrimesNames具有哪種類型的對象,您確定它具有CrimesInfo對象嗎?
  3. 要知道什么類型的對象marrCrimesNames擁有一個索引0的引用,並在左側調試面板的degugger中檢查對象的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM