【问题标题】:Code duplication - swift3代码重复 - swift3
【发布时间】:2017-04-24 12:15:41
【问题描述】:

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()

如您所见,下面的代码在两个按钮中都有重复。我怎样才能避免这种情况?我试图用一种方法编写它,但我一定是做错了什么,这会引发很多错误。

    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()

标签: swift3


【解决方案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
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多