代码复制-swift3

代码复制-swift3,swift3,Swift3,这里是swift3 noob,如果这是个愚蠢的问题,请原谅 我曾多次遇到这个问题,但一直无法解决。如何避免下面的代码重复 @IBAction func logOutButton(_ sender: Any) { var userEntered = usernameText.text! let appDelegate = UIApplication.shared.delegate as! AppDelegate let context = appDelegate.per

这里是swift3 noob,如果这是个愚蠢的问题,请原谅

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

@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()
@iAction func logOutButton(\uSender:Any){
var userEntered=usernameText.text!
让appDelegate=UIApplication.shared.delegate为!appDelegate
让上下文=appDelegate.persistentContainer.viewContext
let request=NSFetchRequest(entityName:“用户”)
request.predicate=NSPredicate(格式:“用户名=%@”,“xyz”)
做{
let results=try context.fetch(请求)
}抓住{
打印(“删除失败”)
}
}
@iAction func submitButton(\发送方:任意){
var users=[String]()
var userEntered=usernameText.text!
让appDelegate=UIApplication.shared.delegate为!appDelegate
让上下文=appDelegate.persistentContainer.viewContext
let request=NSFetchRequest(entityName:“用户”)
让newValue=NSEntityDescription.insertNewObject(forEntityName:“用户”,插入:上下文)
setValue(用户输入,forKey:“用户名”)
request.returnsObjectsAsFaults=false
做{
尝试context.save()
正如你所看到的,下面的代码在两个按钮中都是重复的。我如何避免这种情况呢?我曾尝试用一种方法编写它,但我一定是做错了什么,这会引发很多错误

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


    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
var userEntered=usernameText.text!
让appDelegate=UIApplication.shared.delegate为!appDelegate
让上下文=appDelegate.persistentContainer.viewContext
let request=NSFetchRequest(entityName:“用户”)

谢谢

只需创建一个返回函数,返回一个
NSFetchRequest

func getFetchRequest() -> NSFetchRequest {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
    return request
}
func getFetchRequest()->NSFetchRequest{
让appDelegate=UIApplication.shared.delegate为!appDelegate
让上下文=appDelegate.persistentContainer.viewContext
let request=NSFetchRequest(entityName:“用户”)
退货申请
}

创建一个返回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")
}

请说明您尝试了什么以及遇到了什么错误。为什么不将您多次使用的代码放在一个函数中,然后调用该函数?使用
NSManagedObject
子类,它避免了大量样板代码。然后您可以编写
let request=Users.fetchRequest()
@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")
    }
}