2017-04-24 17 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") 

だけNSFetchRequestを返すreturn関数を作るあなた

+1

のようになります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") } 

を返す関数を作成し、あなたが試してみました何を、あなたが取得しているかのエラーを示してください。 – shallowThought

+0

関数内で複数回使用しているコードを配置し、その関数を呼び出すのはなぜですか? –

+0

'NSManagedObject'サブクラスを使用すると、定型コードがたくさん使われなくなります。次に、 'let request = Users.fetchRequest()'と書くことができます。 – vadian

答えて

1

ありがとうございます。

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

次に、あなたの行動は

@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") 
    } 
}