在swift

时间:2015-08-13 12:29:21

标签: ios arrays json swift xcode6

我有一个for in循环,它扫描一个数组并返回三个不同的值。对于每个值,执行不同的preformSegueWithIdentifier。在新视图中回答了一个问题,在回答问题后,视图会将您带回原始视图。但是,for in循环从一开始就再次运行,每次都将我重定向到相同的视图并回答相同的问题而不是前进。

所以我想存储数组并控制我离开它的位置,以防止循环重复。

我对Swift有点新意,所以任何帮助都会非常感激。干杯!

这是循环:

   if let data = response.responseObject as? NSData {
            let str = NSString(data: data, encoding: NSUTF8StringEncoding)
            println("response: \(str)") //prints the HTML of the page
            let json = JSON(data: data)
            let name = json["company"]["name"].stringValue
            let user = json["fields"]["user"]
            let extra = json["fields"]["custom"]
            for (i: String,custom: JSON)in extra {
                let type = custom["type"]
                let Qs = custom["displayName"]

                if type == "text"{
                    performSegueWithIdentifier(Text, sender: self)
                }

                if type == "multi"{
                    performSegueWithIdentifier(Multiple, sender: self)
                }
                if type == "ord"{
                    performSegueWithIdentifier(Ordinal, sender: self)
                }




            }

该数组取自json:

 global.token = defaults.stringForKey("MyKey")!
        var request = HTTPTask()
        request.requestSerializer = HTTPRequestSerializer()
        request.requestSerializer.headers["Authorization"] = "Bearer " + global.token
        global.QRId =    global.url.substringFromIndex(advance(global.url.startIndex,31)) //retrieves the ID from the URL
        request.GET("url" , parameters: nil, completionHandler: {(response: HTTPResponse) -> Void in
            if let err = response.error {
                println("error: \(err.localizedDescription)")
                return //also notify app of failure as needed
            }
             if let data = response.responseObject as? NSData {
            let str = NSString(data: data, encoding: NSUTF8StringEncoding)
            println("response: \(str)") //prints the HTML of the page
            let json = JSON(data: data)
            let name = json["company"]["name"].stringValue
            let user = json["fields"]["user"]
            let extra = json["fields"]["custom"]

json格式如下:

{
    "id": 3,
    "name": "Test Relay #1",
    "anonymous": false,
    "fields": {
        "user": [
            "name",
            "email",
            "dateofbirth"
        ],
        "custom": [
            {
                "type": "text",
                "displayName": "What did you like about our service today?"
            },
            {
                "type": "multi",
                "choices": [
                    "Red",
                    " Green",
                    " Blue",
                    " Orange"
                ],
                "displayName": "Which of these do you like the most?"
            },
            {
                "type": "ordinal",
                "choices": {
                    "max": "10",
                    "min": "1"
                },
                "displayName": "How would you rate us on a scale of 1-10?"
            }
        ]
    },
    "created_at": "2015-08-10 13:23:45",
    "updated_at": "2015-08-10 13:23:45",
    "company": {
        "id": 1,
        "name": "Test Company",
        "address": "5 Test Place",
        "postcode": "TE57 1AB",
        "phonenumber": "0800001066",
        "countrycode": null,
        "created_at": "2015-08-10 12:17:15",
        "updated_at": "2015-08-10 12:17:15"
    }
}

1 个答案:

答案 0 :(得分:1)

这就是你可以实现这样的方法,我没有在Xcode中检查这一点,所以要小心错误。

let extra = json["fields"]["custom"]
var i = 0

let defaults = NSUserDefaults.standardUserDefaults()
if defaults.objectForKey("savedPosition") != nil {
    i = defaults.objectForKey("savedPosition") as! Int
}  

for i; i < extra.count; i++ {
    let type = extra[i]["type"]
    let Qs = extra[i]["displayName"]

    if type == "text"{
        defaults.setObject(i++, forKey: "savedPosition")
        performSegueWithIdentifier(Text, sender: self)
        break
    }

    if type == "multi"{
        defaults.setObject(i++, forKey: "savedPosition")
        performSegueWithIdentifier(Multiple, sender: self)
        break
    }

    if type == "ord"{
        defaults.setObject(i++, forKey: "savedPosition")
        performSegueWithIdentifier(Ordinal, sender: self)
        break
    }

    defaults.setObject(nil, forKey: "savedPosition")
}