Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么字典是零?_Ios_Swift_Nsdictionary - Fatal编程技术网

Ios 为什么字典是零?

Ios 为什么字典是零?,ios,swift,nsdictionary,Ios,Swift,Nsdictionary,这是我正在进行错误帮助的代码 for result in (result2 ){ var dictData: NSDictionary? dictData?.setValue(result.valueForKey("offer_title") as? String, forKey:"offer_title") print(result.valueForKey("offer_title") as?

这是我正在进行错误帮助的代码

         for result in (result2 ){

            var dictData: NSDictionary?

             dictData?.setValue(result.valueForKey("offer_title") as? String, forKey:"offer_title")
              print(result.valueForKey("offer_title") as? String)
            if result.valueForKey("discountPercentageOff") as? String != "" {
                dictData?.setValue(result.valueForKey("discountPercentageOff") as? String, forKey:"discountPercentageOff")
                print(result.valueForKey("discountPercentageOff") as? String)
            }

            dictData?.setValue(result.valueForKey("is_booked") as? Bool, forKey:"is_booked")
             print(result.valueForKey("is_booked"))
            dictData?.setValue(result.valueForKey("is_saved") as? Bool, forKey:"is_saved")
            print(result.valueForKey("is_saved"))

            dictData?.setValue(result.valueForKey("area_id") as? String, forKey:"area_id")
            print(result.valueForKey("area_id"))

            dictData?.setValue(result.valueForKey("area_name") as? String, forKey:"area_name")

            dictData?.setValue(result.valueForKey("business_id") as? String, forKey:"business_id")
            dictData?.setValue(result.valueForKey("business_name") as? String, forKey:"business_name")
            dictData?.setValue(result.valueForKey("category_id") as? String, forKey:"category_id")
            dictData?.setValue(result.valueForKey("category_name") as? String, forKey:"category_name")
            dictData?.setValue(result.valueForKey("expiry_date") as? String, forKey:"expiry_date")
            dictData?.setValue(result.valueForKey("featured") as? String, forKey:"featured")
            dictData?.setValue(result.valueForKey("locality") as? String, forKey:"locality")
            dictData?.setValue(result.valueForKey("offer_available") as? String, forKey:"offer_available")
            dictData?.setValue(result.valueForKey("offer_id") as? String, forKey:"offer_id")
            dictData?.setValue(result.valueForKey("offer_image") as? String, forKey:"offer_image")
            dictData?.setValue(result.valueForKey("offer_nature") as? String, forKey:"offer_nature")
            dictData?.setValue(result.valueForKey("offerNatureValue") as? String, forKey:"offerNatureValue")
            dictData?.setValue(result.valueForKey("on_going") as? Bool, forKey:"on_going")
            dictData?.setValue(result.valueForKey("discountOriginalPrice") as? String, forKey:"discountOriginalPrice")
            dictData?.setValue(result.valueForKey("discountDiscountedPrice") as? String, forKey:"discountDiscountedPrice")

            let offer = Offer()
            offer.setDatafromServer(dictData!)
             self.saveOfferData(item as! NSDictionary)
            print("item:\(dictData)")

            self._featuredOfferArray.addObject(offer)
            self.feturedOfferTableView.reloadData()



        }

当我将nsdictionary作为参数传递时,它会给出可选的错误nil,您可以看到我创建了nsdictionary的每个循环。但它仍然是零。我不明白

您从不初始化字典,
var dictData:NSDictionary?
只定义变量的类型。此外,如果您想更改字典,它必须是可变的

首先:

var dictData: NSMutableDictionary? = NSMutableDictionary()
把这行改成

 var dictData = NSMutableDictionary();

失败的原因是字典根本没有初始化

Swift本机类型有一个更简单的语法,实际上不需要任何类型转换,因为您只是复制
AnyObject
项。如果任何值为
nil
,则不设置键

 for result in result2  {

     var dictData = [String:AnyObject]()

     dictData["offer_title"] = result["offer_title"]
     dictData["discountPercentageOff"] = result["discountPercentageOff"]
...

甚至复制整个字典(在Swift中,由于值语义,没有问题)而且删除未使用的键更有效。

您需要声明一个NSMutableDictionary而不是NSDictionary
NSDictionary
是不可变的。我没有看到任何结果。我看到您在哪里声明了对
NSDictionary
的引用,但没有看到您在哪里创建的引用。为什么要创建一个包含非可选数据的可选字典??原因是
NSDictionary
是不可变的,并且您从未初始化过字典。使用本机Swift字典和密钥订阅,您可以免费获得可变性。并停止使用
setValue:forKey:
,除非您知道(并且需要)特殊行为。
 for result in result2  {

     var dictData = [String:AnyObject]()

     dictData["offer_title"] = result["offer_title"]
     dictData["discountPercentageOff"] = result["discountPercentageOff"]
...