Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Xcode Swift泛型方法不适用于可选向下转换_Xcode_Generics_Swift_Ios8_Afnetworking 2 - Fatal编程技术网

Xcode Swift泛型方法不适用于可选向下转换

Xcode Swift泛型方法不适用于可选向下转换,xcode,generics,swift,ios8,afnetworking-2,Xcode,Generics,Swift,Ios8,Afnetworking 2,使用AFNetworking,我试图解析JSON并创建一些模型对象。我将字典传递给模态对象的初始值设定项,并让它按如下方式配置自己: public class ModalObject: NSObject { public var area: String? init(data: Dictionary<String, AnyObject>) { if let area: AnyObject = data["Area"] { s

使用AFNetworking,我试图解析JSON并创建一些模型对象。我将字典传递给模态对象的初始值设定项,并让它按如下方式配置自己:

public class ModalObject: NSObject {

    public var area: String?

    init(data: Dictionary<String, AnyObject>) {
        if let area: AnyObject = data["Area"] {
            self.area = area as? String
        }
    }
}
然而,这似乎不起作用,因为可选的downcast总是返回nil

我的通用方法是否有问题?

请查看:


顺便说一句,JSON和静态类型不太合拍。泛型用于静态类型,而JSON是动态的。

我建议使用pod。 您可以找到文档和示例。它提到了负责输入验证、类型转换、类级联等的
数据模型。自动执行。
这可能会在不久的将来为您节省一些时间。
正如Github页面上提到的,这是一个关于“如何使用数据模型获取和解析JSON”的分步教程,这可能是您感兴趣的地方


如果您以前没有使用过pod,那么关于如何设置它,这是一个非常直接的教程。

谢谢Alex,这个pod看起来很有趣,但是,我更感兴趣的是,为什么我的通用方法比我刚才主要学习Swift时如何处理JSON更有效。谢谢dankogai。同样,这看起来很有趣,但我主要是想理解为什么我的泛型方法不起作用。为了更好地反映这一点,我更新了问题标题。我现在不在Mac电脑上,所以我无法测试它,但我有一种预感,在
中使用
Any
作为
if let
的类型可能会解决您的问题,因为String在Swift中是一种值类型(因此不是
AnyObject
)。
class func valueForDictionaryKey<T>(key :String, dictionary :Dictionary<String, AnyObject>) -> T? {
    if let value: AnyObject = dictionary[key] {
        return value as? T
    }

    return nil
}
self.area = ModalObject.valueForDictionaryKey("Area", dictionary: data)