我有一个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"
}
}
答案 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")
}