Trip
Trip

Reputation: 27114

How can you catch the return of 0 in a Swift if statement?

I have an init call that either lazy loads my seed data, or loads data that exists in my database :

    if let savedPages = loadPages() {
        pages += savedPages
    } else {
        createPages()
    }

my createPages() method is not being called because loadPages() is at the very least returning 0 Results.

func loadPages() -> [NSManagedObject]? {

    // Load all those pages!
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext
    let fetchRequest = NSFetchRequest(entityName: "Page")
    do {
        let results = try managedContext.executeFetchRequest(fetchRequest)
        return results as? [NSManagedObject]
    } catch let error as NSError {
        print("Could not fetch \(error), \(error.userInfo)")
    }
    return nil
}

How can I make my else statement catch so that createPages() is called?

Upvotes: 0

Views: 69

Answers (2)

Mike Pollard
Mike Pollard

Reputation: 10195

You could add a where clause:

if let savedPages = loadPages() where savedPages.count > 0 {
    pages += savedPages
}
else {
    createPages()
}

Upvotes: 0

R Menke
R Menke

Reputation: 8391

Option 1:

Add a return in loadPages()

if results.count == 0 { return nil }

func loadPages() -> [NSManagedObject]? {

    // Load all those pages!
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext
    let fetchRequest = NSFetchRequest(entityName: "Page")
    do {
        let results = try managedContext.executeFetchRequest(fetchRequest)
        ///
        if results.count == 0 { return nil }
        ///
        return results as? [NSManagedObject]
    } catch let error as NSError {
        print("Could not fetch \(error), \(error.userInfo)")
    }
    return nil
}

Option 2:

Add where after if let

if let savedPages = loadPages() where savedPages.count > 0 {
    pages += savedPages
} else {
    createPages()
}

Upvotes: 2

Related Questions