当值为动态时如何增加数组索引(Swift)

时间:2021-05-17 14:29:27

I am Getting a Dynamic Array which Consist (Dictionary with Array ) and want to increase the Index of Array and will go on to Next Dictionary on action.

我得到了一个动态数组,它包含(Dictionary with Array)并希望增加数组的索引,并将继续到下一个Dictionary on action。

After Parsing The Value in swapLibs

解析swapLibs中的值之后

var currentQuizIndex = 0
func Dataparsed() {
    ServiceManager.service(ServiceType.POST, path: urslStr, param: nil, completion: {  (sucess, response, error, code) -> Void in
        if (code == 200) {
            let QuizData  = (swapLibs?.valueForKey("quiz") as! NSArray)
            let  quizData = playInfo.PlayQuizInfo(QuizData[self.currentQuizIndex] as? NSDictionary)
            self.playQuizArray.addObject(quizData)
            self.playQuizTitle?.text = quizData.quizQuestion
            self.playQImage.sd_setImageWithURL(NSURL(string: quizData.quizQImage!))
            self.QNumber?.text = "\(self.Qno)/\(self.noofQuestion)"
        }
    })
}

And The Modal is

模态是

class playInfo: NSObject {

    var quizId :           String? = ""
    var quizQId :          String? = ""
    var quizQImage :       String? = ""
    var quizQuestion :     String? = ""
    var quizType :         String? = ""
    var quizIndex :        String? = ""


    class func  PlayQuizInfo(dict: NSDictionary?) -> playInfo {

        let Pinfo = playInfo()
        Pinfo.WrapPlayQuiz(dict)
        return Pinfo
    }

    func WrapPlayQuiz(dict: NSDictionary?)  {
        if dict == nil {
            return
        }
        self.quizId           = dict!.objectForKey("quizId")    as? String
        self.quizIndex        = dict!.objectForKey("index")     as? String
        self.quizQImage       = dict!.objectForKey("QuesImage")     as? String
        self.quizQuestion     = dict!.objectForKey("question")  as? String
        self.quizType         = dict!.objectForKey("Type")      as? String
        self.quizQId          = dict!.objectForKey("questionId")      as? String
    }

}

Here is Structure

这是结构

{  
   "quiz":[  
      {  
         "quizId":"7295",
         "QuesImage":"http:\/\/proprofs.com\/api\/ckeditor_images\/man-approaches-woman1(1).jpg",
         "question":"How do you know him?",
         "questionId":"216210",
         "Type":"PQ",
         "index":4,
         "keys":[  
            {  
               "answerId":"8266",
               "option":"He's in one or more of my classes, and we're good friends.",
               "AnsImage":"Image Not Available"
            },
            {  },
            {  },
            {  },
            {  }
         ]
      },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  }
   ]
}

Each Dictionary is Containing same Key As above

每个字典都包含与上面相同的键

Any Help Will Be Appreciated.Thanks.

任何帮助都会受到感激的。谢谢。

1 个解决方案

#1


1  

As I don't have ServiceManager at my end so I have created this code hypothetically. It might solve you issue of saving all data in to one array. It also adds keys in to array as an object.

因为我没有ServiceManager,所以我假设创建了这段代码。它可以解决将所有数据保存到一个数组中的问题。它还将键作为对象添加到数组中。

EDIT 1 : correct QuizKey object array formation. Let me know if any kind of error occurs, as I am unable to test it at my end.

编辑1:正确的QuizKey对象数组构造。如果有任何错误发生,请告诉我,因为我无法在我这边进行测试。

Edit 2: I have made a general ViewController its working perfectly.Try running this View Controller file and you will see the results.

编辑2:我做了一个通用视图控制器,它工作得很好。尝试运行这个视图控制器文件,您将看到结果。

class TestVC: UIViewController {

    //An Array similar to the response you are getting from the server
    var response:[AnyObject] = [
        [
            "quizId" : "1111",
            "QuesImage" : "http://proprofs.com/api/ckeditor_images/man-approaches-woman1(1).jpg",
            "question" : "How do you know him?",
            "questionId" : "216210",
            "Type" : "PQ",
            "index" : 4,
            "keys":[
                [
                    "answerId":"8266",
                    "option":"He's in one or more of my classes, and we're good friends.",
                    "AnsImage":"Image Not Available"
                ],
                [
                    "answerId":"8266",
                    "option":"He's in one or more of my classes, and we're good friends.",
                    "AnsImage":"Image Not Available"
                ],
                [
                    "answerId":"8266",
                    "option":"He's in one or more of my classes, and we're good friends.",
                    "AnsImage":"Image Not Available"
                ]
            ]
        ],
        [
            "quizId" : "2222",
            "QuesImage" : "http://proprofs.com/api/ckeditor_images/man-approaches-woman1(1).jpg",
            "question" : "How do you know him?",
            "questionId" : "216210",
            "Type" : "PQ",
            "index" : 4,
            "keys":[
                [
                    "answerId":"8266",
                    "option":"He's in one or more of my classes, and we're good friends.",
                    "AnsImage":"Image Not Available"
                ],
                [
                    "answerId":"8266",
                    "option":"He's in one or more of my classes, and we're good friends.",
                    "AnsImage":"Image Not Available"
                ],
                [
                    "answerId":"8266",
                    "option":"He's in one or more of my classes, and we're good friends.",
                    "AnsImage":"Image Not Available"
                ]
            ]
        ]
    ]

    var playQuizArray:[playInfo]! = []

    override func viewDidLoad() {
        super.viewDidLoad()

        print(response)

        for dict in response {
            self.playQuizArray.append(playInfo.PlayQuizInfo(dict as? [String:AnyObject]))
        }

        print(self.playQuizArray)

        let quiz = self.playQuizArray[0]
        print("quizId \(quiz.quizId)")
        print("keyAnswerId \(quiz.quizKeys![0].keyAnswerId)")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

class playInfo: NSObject {
    var quizId :           String? = ""
    var quizQId :          String? = ""
    var quizQImage :       String? = ""
    var quizQuestion :     String? = ""
    var quizType :         String? = ""
    var quizIndex :        String? = ""
    //quizKeys will contain quiz array
    var quizKeys :       [QuizKey]? = []

    class func  PlayQuizInfo(dict: [String:AnyObject]?) -> playInfo {

        let Pinfo = playInfo()
        Pinfo.WrapPlayQuiz(dict)
        return Pinfo
    }

    func WrapPlayQuiz(dict: [String:AnyObject]?)  {
        if dict == nil {
            return
        }
        self.quizId           = dict!["quizId"] as? String
        self.quizIndex        = dict!["index"] as? String
        self.quizQImage       = dict!["QuesImage"] as? String
        self.quizQuestion     = dict!["question"] as? String
        self.quizType         = dict!["Type"] as? String
        self.quizQId          = dict!["questionId"] as? String

        //add key object array to the quizKeys
        if let arrKeys = dict!["keys"] as? [AnyObject] {
            for arr in arrKeys {
                let key:QuizKey = QuizKey.QuizKeyInfo(arr as? [String : AnyObject])
                self.quizKeys?.append(key)
            }
        }
    }

}

class QuizKey: NSObject {
    var keyAnswerId :       String? = ""
    var keyOption :         String? = ""
    var keyAnsImage :       String? = ""

    class func  QuizKeyInfo(dict: [String:AnyObject]?) -> QuizKey {
        let QKeys = QuizKey()
        QKeys.WrapQuizKeys(dict)
        return QKeys
    }

    func WrapQuizKeys(dict: [String:AnyObject]?)  {
        if dict == nil {
            return
        }

        self.keyAnswerId      = dict!["answerId"]    as? String
        self.keyOption        = dict!["option"]     as? String
        self.keyAnsImage      = dict!["AnsImage"]     as? String
    }

}

#1


1  

As I don't have ServiceManager at my end so I have created this code hypothetically. It might solve you issue of saving all data in to one array. It also adds keys in to array as an object.

因为我没有ServiceManager,所以我假设创建了这段代码。它可以解决将所有数据保存到一个数组中的问题。它还将键作为对象添加到数组中。

EDIT 1 : correct QuizKey object array formation. Let me know if any kind of error occurs, as I am unable to test it at my end.

编辑1:正确的QuizKey对象数组构造。如果有任何错误发生,请告诉我,因为我无法在我这边进行测试。

Edit 2: I have made a general ViewController its working perfectly.Try running this View Controller file and you will see the results.

编辑2:我做了一个通用视图控制器,它工作得很好。尝试运行这个视图控制器文件,您将看到结果。

class TestVC: UIViewController {

    //An Array similar to the response you are getting from the server
    var response:[AnyObject] = [
        [
            "quizId" : "1111",
            "QuesImage" : "http://proprofs.com/api/ckeditor_images/man-approaches-woman1(1).jpg",
            "question" : "How do you know him?",
            "questionId" : "216210",
            "Type" : "PQ",
            "index" : 4,
            "keys":[
                [
                    "answerId":"8266",
                    "option":"He's in one or more of my classes, and we're good friends.",
                    "AnsImage":"Image Not Available"
                ],
                [
                    "answerId":"8266",
                    "option":"He's in one or more of my classes, and we're good friends.",
                    "AnsImage":"Image Not Available"
                ],
                [
                    "answerId":"8266",
                    "option":"He's in one or more of my classes, and we're good friends.",
                    "AnsImage":"Image Not Available"
                ]
            ]
        ],
        [
            "quizId" : "2222",
            "QuesImage" : "http://proprofs.com/api/ckeditor_images/man-approaches-woman1(1).jpg",
            "question" : "How do you know him?",
            "questionId" : "216210",
            "Type" : "PQ",
            "index" : 4,
            "keys":[
                [
                    "answerId":"8266",
                    "option":"He's in one or more of my classes, and we're good friends.",
                    "AnsImage":"Image Not Available"
                ],
                [
                    "answerId":"8266",
                    "option":"He's in one or more of my classes, and we're good friends.",
                    "AnsImage":"Image Not Available"
                ],
                [
                    "answerId":"8266",
                    "option":"He's in one or more of my classes, and we're good friends.",
                    "AnsImage":"Image Not Available"
                ]
            ]
        ]
    ]

    var playQuizArray:[playInfo]! = []

    override func viewDidLoad() {
        super.viewDidLoad()

        print(response)

        for dict in response {
            self.playQuizArray.append(playInfo.PlayQuizInfo(dict as? [String:AnyObject]))
        }

        print(self.playQuizArray)

        let quiz = self.playQuizArray[0]
        print("quizId \(quiz.quizId)")
        print("keyAnswerId \(quiz.quizKeys![0].keyAnswerId)")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

class playInfo: NSObject {
    var quizId :           String? = ""
    var quizQId :          String? = ""
    var quizQImage :       String? = ""
    var quizQuestion :     String? = ""
    var quizType :         String? = ""
    var quizIndex :        String? = ""
    //quizKeys will contain quiz array
    var quizKeys :       [QuizKey]? = []

    class func  PlayQuizInfo(dict: [String:AnyObject]?) -> playInfo {

        let Pinfo = playInfo()
        Pinfo.WrapPlayQuiz(dict)
        return Pinfo
    }

    func WrapPlayQuiz(dict: [String:AnyObject]?)  {
        if dict == nil {
            return
        }
        self.quizId           = dict!["quizId"] as? String
        self.quizIndex        = dict!["index"] as? String
        self.quizQImage       = dict!["QuesImage"] as? String
        self.quizQuestion     = dict!["question"] as? String
        self.quizType         = dict!["Type"] as? String
        self.quizQId          = dict!["questionId"] as? String

        //add key object array to the quizKeys
        if let arrKeys = dict!["keys"] as? [AnyObject] {
            for arr in arrKeys {
                let key:QuizKey = QuizKey.QuizKeyInfo(arr as? [String : AnyObject])
                self.quizKeys?.append(key)
            }
        }
    }

}

class QuizKey: NSObject {
    var keyAnswerId :       String? = ""
    var keyOption :         String? = ""
    var keyAnsImage :       String? = ""

    class func  QuizKeyInfo(dict: [String:AnyObject]?) -> QuizKey {
        let QKeys = QuizKey()
        QKeys.WrapQuizKeys(dict)
        return QKeys
    }

    func WrapQuizKeys(dict: [String:AnyObject]?)  {
        if dict == nil {
            return
        }

        self.keyAnswerId      = dict!["answerId"]    as? String
        self.keyOption        = dict!["option"]     as? String
        self.keyAnsImage      = dict!["AnsImage"]     as? String
    }

}