首页 > 一个有关于swift型态的初浅问题

一个有关于swift型态的初浅问题

问这个问题实在是令人感到害羞,但我也搞不清楚要怎么弄才是正确的

程式如下

 CateDictionary = CateJSON as! NSMutableArray
    var i:Int = 0
    var tCateDictionary = NSMutableDictionary()
    tableCateArry = NSMutableArray()
    if CateDictionary != nil {
       
        for cate in CateDictionary {
            
            if cate.objectForKey("Level") as! Int == 1 {
                
                tCateDictionary.setValue(cate.objectForKey("Level"), forKey: "Level")
                tCateDictionary.setValue(cate.objectForKey("catno"), forKey: "catno")
                tCateDictionary.setValue(cate.objectForKey("cat_name"), forKey: "cat_name")
                print(tCateDictionary)
                
                //tableCateArry.addObject(tCateDictionary)
                tableCateArry.insertObject(tCateDictionary, atIndex: i)
                //print(tableCateArry)
                //tCateDictionary.removeAllObjects()
                i++
            }
        }
    }
    print(tableCateArry)

不管我是用 insertobject 或 addobjecgt ,结果都是一样的

图一、(原始资料截出的打印的结果)

图二,我存下来后打印的结果(晕)

我只是想把 一个 dictionary 里的某些值,存到一个nsarray里,但 不知道为什么存出来的结果都是一样的,但是我print出来的结果是不同的,addobject 后就变一样的,为什么?那里错?怎么作才是正确的


var tCateDictionary = NSMutableDictionary() 这个定义放到了 for 循环外面,所以你每次添加到 array 里的都是同一个 tCateDictionary 对象,然后每次循环里都重新设置了 Level, cat_name, catno 这三个 key 对应的 value,每次都覆盖了上一次设置的 value,所以导致到最后都变成了最后一个数据的值。循环里的那个打印,应该值都是对的,因为那时候还没有被覆盖,但是外面那个打印,肯定就已经不对了。

【热门文章】
【热门文章】