2017-04-24 60 views
3

swift3 noob在这里所以请原谅我,如果这是一个愚蠢的问题。代码重复 - swift3

我几次遇到过这个问题,但一直无法解决它。我如何避免下面的代码重复。

@IBAction func logOutButton(_ sender: Any) { 

    var userEntered = usernameText.text! 

    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext 

    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 

    request.predicate = NSPredicate(format: "username = %@", "xyz") 

    do { 

     let results = try context.fetch(request) 

    } catch { 

     print ("Delete failed") 
    } 

} 

@IBAction func submitButton(_ sender: Any) { 
    var users = [String]() 
    var userEntered = usernameText.text! 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext 


    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 


    let newValue = NSEntityDescription.insertNewObject(forEntityName: "Users", into: context) 

    newValue.setValue(userEntered, forKey: "username") 

    request.returnsObjectsAsFaults = false 

    do { 
     try context.save() 

正如你可以看到下面的代码在两个按钮中都重复。我怎样才能避免这种情况?我试图用一种方法来编写它,但我必须做出错误的事情,并引发很多错误。

var userEntered = usernameText.text! 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext 


    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 

谢谢

+1

请出示你试过,你做了什么错误。 – shallowThought

+0

为什么不把你正在使用的代码多次放入一个函数然后调用该函数? –

+0

使用'NSManagedObject'子类,它避免了很多样板代码。然后你可以写'let request = Users.fetchRequest()' – vadian

回答

1

只是要返回一个NSFetchRequest回报功能。

func getFetchRequest() -> NSFetchRequest { 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext 
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 
    return request 
} 
0

创建函数返回NSFetchRequest

func getRequest() -> NSFetchRequest { 
    var userEntered = usernameText.text! 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext 
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 
} 

那么你的行为就会像

@IBAction func logOutButton(_ sender: Any) { 
    let request = getRequest() 
    request.predicate = NSPredicate(format: "username = %@", "xyz") 
    do { 
     let results = try context.fetch(request) 
    } catch { 
     print ("Delete failed") 
    } 
}