2015-06-30 14 views
6

Ho implementato tale classe:@available con le versioni iOS pre-disponibili - proprietà mancanti

class MapLayoutGuide: NSObject, UILayoutSupport { 
    var insetLength: CGFloat = 0 
    init(insetLength: CGFloat) { 
     self.insetLength = insetLength 
    } 
    var length: CGFloat { 
     return insetLength 
    } 
} 

Tutto stava funzionando bene, però ci sono stati nuovi modifiche introdotte con la nuova versione di iOS: Apple changelog.

Così ora sto ricevendo 3 errori:

  • Protocol requires property 'topAnchor' with type 'NSLayoutYAxisAnchor',
  • Protocol requires property 'bottomAnchor' with type 'NSLayoutYAxisAnchor',
  • Protocol requires property 'heightAnchor' with type 'NSLayoutDimension'.

Guardando in UILayoutSupport implementazione posso vedere nuove variabili:

@available(iOS 9.0, *) 
var topAnchor: NSLayoutYAxisAnchor { get } 
@available(iOS 9.0, *) 
var bottomAnchor: NSLayoutYAxisAnchor { get } 
@available(iOS 9.0, *) 
var heightAnchor: NSLayoutDimension { get } 

La mia app è iOS 8.0+. Quindi la domanda è: cosa dovrei fare con questi valori? Non riesco a impostare il flag @available e voglio che il codice funzioni entrambi con iOS 8 e 9, ma devo sovrascriverlo. Nessuna idea su cosa farne.

Il codice utilizzato per funzionare ieri su Xcode Beta 1, che cosa non ha importanza atm come voglio che funzioni su API corrente non precedente.

+0

Il '@ available' vi tel voi da quale versione di iOS il metodo/proprietà/classe è disponibile, questo' @available (iOS 9.0, *) 'significare disponibile solo su iOS 9 o superiore. Quindi non è possibile chiamare questi metodi in iOS 8. – rckoenes

+0

@rckoenes Questo lo so, ma devo anche sovrascriverlo (leggere gli errori). Ora la domanda è come implementarla in modo che funzioni sia su iOS 9 sia su iOS 8. Rileggi la domanda, specialmente quella precedente all'ultimo paragrafo (o se la mia domanda non è chiara spero che lo sia). – Vive

+0

Scusa, sì, ora capisco. in iOS 9 questi getter sono obbligatori e devono essere implementati. Se li implementate, dovrebbero funzionare in iOS 8 poiché non li chiama. – rckoenes

risposta

5

Ha funzionato dopo aver pulito il progetto.

@available(iOS 9.0, *) 
var topAnchor: NSLayoutYAxisAnchor { 
    return NSLayoutYAxisAnchor() 
} 


@available(iOS 9.0, *) 
var bottomAnchor: NSLayoutYAxisAnchor { 
    return NSLayoutYAxisAnchor() 
} 


@available(iOS 9.0, *) 
var heightAnchor: NSLayoutDimension { 
    return NSLayoutDimension() 
} 
Problemi correlati