检查AnyObject是否为空或没有密钥,或者该密钥的值是否为空

时间:2016-03-11 20:01:28

标签: ios swift swift2

在核心数据中,我有一个名为“CachedRecipes”的实体,其中包含一个名为“jsonData”的属性。

我有一个从此属性中获取JSON数据的函数

func getJSONFromCoreData()->AnyObject    {

    var jsonDataInCoreData:AnyObject = ""

    do
    {
        let fetchRequest = NSFetchRequest(entityName: "CachedRecipes")

       let fetchedResults = try self.sharedContext.executeFetchRequest(fetchRequest)

        for (var i=0; i < fetchedResults.count; i++)
        {
            let single_result = fetchedResults[i]
            let out = single_result.valueForKey("jsonData")
            print(out)
            jsonDataInCoreData = out!
        }

    }
    catch
    {
        print("error")
    }

    return jsonDataInCoreData
}

我在同一个UIViewController的viewDidLoad中使用一个语句来获取这样的数据:

let jsonDataFromCoreData = self.getJSONFromCoreData()

如何检查jsonDataFromCoreData是否为空或者没有任何名为jsonData的密钥且该密钥没有任何值?如果发生错误,我需要打印出错误。

1 个答案:

答案 0 :(得分:1)

更改您的功能,使其返回可选

func getJSONFromCoreData()->AnyObject?    {

    var jsonDataInCoreData:AnyObject?

    do
    {
        let fetchRequest = NSFetchRequest(entityName: "CachedRecipes")

       let fetchedResults = try self.sharedContext.executeFetchRequest(fetchRequest)

        for (var i=0; i < fetchedResults.count; i++)
        {
            let single_result = fetchedResults[i]
            let out = single_result.valueForKey("jsonData")
            print(out)
            jsonDataInCoreData = out!
        }

    }
    catch
    {
        print("error")
    }

    return jsonDataInCoreData
}

如果它返回nil,则它不包含该数据。你可以像这样展开:

if let json = getJSONFromCoreData() {
    // Has some data
} else {
    // No data
}