presentViewController no funciona en Swift

Gracias por leer esto. Me gustaría tener un file Swift de funciones en el que puse todas las funciones de mi proyecto, que los otros files Swift podrían llamar. Estoy intentando crear una function de alerta en el file de funciones que, cuando paso una cadena específica, muestra una alerta específica. Estaba funcionando cuando estaba en el file principal, pero cuando lo moví al file de funciones, presentViewController me está dando un error, diciendo "Uso del identificador no resuelto 'presentViewController'". ¡Por favor ayuda! Aquí está mi código: en el file de funciones:

import Foundation import UIKit /********************************************** Variables ***********************************************/ var canTapButton: Bool = false var tappedAmount = 0 /********************************************** Functions ***********************************************/ //the alert to ask the user to assess their speed func showAlert(alert: String) -> Void { if(alert == "pleaseAssessAlert") { let pleaseAssessAlert = UIAlertController(title: "Welcome!", message: "If this is your firs time, I encourage you to use the Speed Assessment Tool (located in the menu) to figure which of you fingers is fastest!", prefernetworkingStyle: .Alert) //ok button let okButtonOnAlertAction = UIAlertAction(title: "Done", style: .Default) { (action) -> Void in //what happens when "ok" is pressed } pleaseAssessAlert.addAction(okButtonOnAlertAction) presentViewController(pleaseAssessAlert, animated: true, completion: nil) } else { println("Error calling the alert function.") } } 

¡Gracias!

El presentViewController es el método de instancia de la class UIViewController . Por lo tanto, no puede acceder a él en su file de function de esta manera.

Debes cambiar la function como:

 func showAlert(alert : String, viewController : UIViewController) -> Void { if(alert == "pleaseAssessAlert") { let pleaseAssessAlert = UIAlertController(title: "Welcome!", message: "If this is your firs time, I encourage you to use the Speed Assessment Tool (located in the menu) to figure which of you fingers is fastest!", prefernetworkingStyle: .Alert) //ok button let okButtonOnAlertAction = UIAlertAction(title: "Done", style: .Default) { (action) -> Void in //what happens when "ok" is pressed } pleaseAssessAlert.addAction(okButtonOnAlertAction) viewController.presentViewController(pleaseAssessAlert, animated: true, completion: nil) } else { println("Error calling the alert function.") } } 

Aquí, está pasando una instancia UIViewController a esta function y llamando a presentViewController de esa class View Controller.

En Swift 3:

El método presentViewController se reemplaza por el present .

Puedes usarlo como el anterior:

 self.present(viewControllerToPresent, animated: true, completion: nil) 

Yo diría que vaya con el método MidHun MP arriba, pero si está buscando otra forma de hacerlo sin traer el UIViewController, entonces:

 func showAlert(alert : String) { var window: UIWindow? if(alert == "pleaseAssessAlert") { let pleaseAssessAlert = UIAlertController(title: "Welcome!", message: "If this is your firs time, I encourage you to use the Speed Assessment Tool (located in the menu) to figure which of you fingers is fastest!", prefernetworkingStyle: .Alert) //ok button let okButtonOnAlertAction = UIAlertAction(title: "Done", style: .Default) { (action) -> Void in //what happens when "ok" is pressed } pleaseAssessAlert.addAction(okButtonOnAlertAction) self.window?.rootViewController?.presentViewController(pleaseAssessAlert, animated: true, completion: nil) } else { println("Error calling the alert function.") } } 

Primero, ¿necesita verificar que su control de navigation sea apropiado o no? Si es Sí, entonces Aquí está el código para el presente y desecha el controller de vista actual

Para presentar PresentViewController:

deje next = self.storyboard? .instantiateViewControllerWithIdentifier ("Su identificador de controller de vista") como! Yourviewcontroller self.presentViewController (next, animated: true, completion: nil)

Despedir presentviewcontroller

self.dismissViewControllerAnimated (true, completion: nil)