如何在Swift if语句中捕获0的返回值?

问题描述:

我有一个init呼叫存在于我的数据库或者延迟加载我的种子数据,或加载数据:如何在Swift if语句中捕获0的返回值?

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

createPages()方法不会被调用,因为loadPages()是最起码返回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 
} 

我怎样才能让我的else statement抓,使createPages()叫?

选项1:

添加回在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 
} 

选项2:

添加whereif let

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

感谢队友!这工作完美。 – Trip

你可以添加一个where条款:

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