bar ios swift xcode

ionic ios status bar overlap



El método supportInterfaceOrientations no anula ningún método de su superclase (1)

Me gusta esto:

override var supportedInterfaceOrientations : UIInterfaceOrientationMask {

... y el resto como lo tienes.

El patrón general

Muchos de los métodos de Cocoa son propiedades ahora, por lo que los implementa como variables calculadas de anulación. Entonces, el patrón para pasar de la semilla 3 (o anterior) a la semilla 4 es:

  • Cambiar func a var

  • Eliminar ()

  • Cambiar -> a :

Esto funciona porque una variable calculada tiene una función getter, por lo que la función que estaba implementando antes simplemente se convierte en la función getter. Y estas son propiedades de solo lectura, por lo que no necesitará un setter.

De manera similar, los métodos afectados son preferredStatusBarStyle , prefersStatusBarHidden , shouldAutorotate , preferredInterfaceOrientationForPresentation y muchos otros. Busque UIKIT_DEFINE_AS_PROPERTIES en el encabezado de Objective-C.

Trascendencia

A largo plazo, hay otros cambios que puede hacer. Por ejemplo, puede agregar un setter (dividiendo su implementación en funciones get y set ), y así puede convertir su implementación en una fachada para una propiedad almacenada. Por ejemplo:

private var _orientations = UIInterfaceOrientationMask.portrait override var supportedInterfaceOrientations : UIInterfaceOrientationMask { get { return self._orientations } set { self._orientations = newValue } }

Entonces, su código tiene una manera de establecer este valor. Si devuelve valores diferentes en momentos diferentes, esto podría hacer que las cosas sean mucho más limpias.

Notas técnicas adicionales

Curiosamente, este cambio no tiene un efecto directo en el código Objective-C existente, porque en Objective-C, la nueva declaración de propiedad, @property(nonatomic, readonly) UIInterfaceOrientationMask supportedInterfaceOrientations; , se satisface con el mismo método que antes:

- (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; }

La razón es que en Objective-C, una @property(readonly) es simplemente una promesa de que existe un método getter correspondiente, y eso es exactamente lo que es este método. Pero en Swift, la forma de escribir el método getter de una propiedad Objective-C es a través de una propiedad , es decir, a través de una variable de instancia. Entonces, solo el código Swift se ve afectado por el cambio: debe reescribir sus métodos como propiedades.

En un UIViewController, este código:

public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { if let mainController = self.mainViewController{ return mainController.supportedInterfaceOrientations } return UIInterfaceOrientationMask.all }

da el error El Method doesn''t override any method from its superclass

Estoy usando Xcode 8 beta 4 y el objetivo de implementación de iOS es 9.0, y Use Legacy Swift Language Version está establecida en No en la Build Settings

¿Cómo podría convertir el código anterior a Swift 3?