function - define - swift syntax
¿Cómo se definen las funciones globales en Swift? (2)
Escribí una función simple que muestra una alerta cuando se llama. Me gustaría usar esta función en varios viewControllers. Ahora mismo tengo el mismo fragmento de código pegado en la parte inferior de cada viewController, pero no puedo evitar pensar que hay una mejor manera.
¿Cómo se puede definir una función a la que se pueda llamar desde cualquier viewController?
A continuación, pegaré mi función a continuación, pero esta es una pregunta general. Me gustaría poder encontrar una forma elocuente de gestionar el teclado de forma idéntica en todos los controladores de vista también.
func displayAlert(title:String, error:String, buttonText: String) {
// Create the alert
var alert = UIAlertController(title: title, message: error, preferredStyle: UIAlertControllerStyle.Alert)
// Add an action
alert.addAction(UIAlertAction(title: buttonText, style: .Default, handler: { action in
// Dismiss when the button is pressed
self.dismissViewControllerAnimated(true, completion: nil)
}))
// Add it to viewController
self.presentViewController(alert, animated: true, completion: nil)
}
A menos que declare la función como private
o fileprivate
, que limita la visibilidad del archivo o ámbito en el que está definida, puede usarla en cualquier parte del módulo si se declara como internal
(por defecto), y también desde módulos externos si se declara como public
o open
Sin embargo, como dice que lo necesita solo en los controladores de vista, ¿por qué no implementarlo como una extensión del controlador de vista?
extension UIViewController {
func displayAlert(title:String, error:String, buttonText: String) {
...
}
}
Por defecto, obtienes el archivo "ViewController.swift" en tu proyecto. puede poner algunas funciones globales por defecto en él Ex. "Comprobar la conexión a Internet"
import SystemConfiguration
class func connectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
guard let defaultRouteReachability = withUnsafePointer(&zeroAddress, {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}) else {
return false
}
var flags : SCNetworkReachabilityFlags = []
if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == false {
return false
}
let isReachable = flags.contains(.Reachable)
let needsConnection = flags.contains(.ConnectionRequired)
return (isReachable && !needsConnection)
}
Y llámalos por
let testConn = ViewController.connectedToNetwork()