Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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 如何在swift中递归遍历NSDictionary_Ios_Objective C_Json_Swift_Nsdictionary - Fatal编程技术网

Ios 如何在swift中递归遍历NSDictionary

Ios 如何在swift中递归遍历NSDictionary,ios,objective-c,json,swift,nsdictionary,Ios,Objective C,Json,Swift,Nsdictionary,我正在编写一个应用程序,我需要实现的一个功能要求该应用程序从网站提取JSON数据,将其存储在字典中,然后能够使用所有键并显示值。我不知道字典的结构会是什么样子,所以我希望递归遍历字典来检索所有信息 我将JSON存储在我需要的网站的字典中,当我将字典变量放入println()语句中时,它会正确显示 我认为这一点,或者这一点的一些变化应该会起作用,但我对swift还是相当陌生,我不确定这是如何从Objective-c转换为swift的 我对该链接感兴趣的部分是: (void)enumerateJSO

我正在编写一个应用程序,我需要实现的一个功能要求该应用程序从网站提取JSON数据,将其存储在字典中,然后能够使用所有键并显示值。我不知道字典的结构会是什么样子,所以我希望递归遍历字典来检索所有信息

我将JSON存储在我需要的网站的字典中,当我将字典变量放入println()语句中时,它会正确显示

我认为这一点,或者这一点的一些变化应该会起作用,但我对swift还是相当陌生,我不确定这是如何从Objective-c转换为swift的

我对该链接感兴趣的部分是:

(void)enumerateJSONToFindKeys:(id)object forKeyNamed:(NSString     *)keyName
{
if ([object isKindOfClass:[NSDictionary class]])
{
    // If it's a dictionary, enumerate it and pass in each key value to check
    [object enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
        [self enumerateJSONToFindKeys:value forKeyNamed:key];
    }];
}
else if ([object isKindOfClass:[NSArray class]])
{
    // If it's an array, pass in the objects of the array to check
    [object enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        [self enumerateJSONToFindKeys:obj forKeyNamed:nil];
    }];
}
else
{
    // If we got here (i.e. it's not a dictionary or array) so its a key/value that we needed 
    NSLog(@"We found key %@ with value %@", keyName, object);
}
}
我不知道该怎么做,任何正确方向的帮助或指点都是非常感谢的。谢谢

编辑:这是我开始走的方向,但是有很多错误。我试着修好,但运气不好

func enumerateJSONToFindKeys(id:AnyObject, keyName:NSString){

    if id.isKindOfClass(NSDictionary)
    {
        AnyObject.enumerateKeysAndObjectsUsingBlock(id.key, id.value, stop:Bool())
            {
                self.enumerateJSONToFindKeys(id.value, forKeyNamed: keyName)
        }
    }
    else if id.isKindOfClass(NSArray)
    {

    }
}
试试这个:

func enumerateJSONToFindKeys(object:AnyObject, forKeyNamed named:String?) {
    if let dict = object as? NSDictionary {
        for (key, value) in dict {
            enumerateJSONToFindKeys(value, forKeyNamed: key as? String)
        }
    }
    else if let array = object as? NSArray {
        for value in array {
            enumerateJSONToFindKeys(value, forKeyNamed: nil)
        }
    }
    else {
        println("found key \(named) value \(object)")
    }
}
它使用Swift
作为?
条件转换操作符,并在NSDictionary和NSArray上进行本机迭代