2015-06-30 18 views
6

I zostały wdrożone taką klasę:@available z wcześniej dostępnych wersji iOS - właściwości brakujące

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

Wszystko działa dobrze, jednak pojawiły się nowe zmiany wprowadzone w nowej wersji iOS: Apple changelog.

Więc teraz jestem otrzymaniu 3 błędy:

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

Patrząc UILayoutSupport realizacji widzę nowe zmienne:

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

Moja aplikacja jest iOS 8.0+. Pytanie więc, co powinienem zrobić z tymi wartościami? Nie mogę ustawić flagi @available i chcę, aby kod działał zarówno z iOS 8 i 9, ale muszę go przesłonić. Brak koncepcji, co z tym zrobić.

Kod używany do pracy wczoraj na Xcode Beta 1, co ofc nie ma znaczenia w bankomacie, ponieważ chcę, aby działał na bieżącym API, nie wcześniej.

+0

Opcja '@ available' będzie tel ty z którego wersja iOS metoda/nieruchomość/klasa jest dostępna, to' @available (iOS 9.0 *) 'oznacza, dostępna tylko na iOS 9 lub wyższej. Tak więc nie można wywoływać tych metod w systemie iOS 8. – rckoenes

+0

@rckoenes To wiem, ale muszę go także przesłonić (odczytać błędy). Teraz pytanie brzmi, jak go zaimplementować, aby działał zarówno na iOS 9, jak i iOS 8. Proszę ponownie przeczytać pytanie, szczególnie przed ostatnim akapitem (lub jeśli moje pytanie nie było jasne, mam nadzieję, że teraz jest). – Vive

+0

Przepraszam, tak, teraz rozumiem. w systemie iOS 9 te gettery są wymagane i muszą zostać wdrożone. Jeśli je wdrożysz, powinny działać w systemie iOS 8, ponieważ ich nie wywołuje. – rckoenes

Odpowiedz

5

To działało po wyczyszczeniu projektu.

@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() 
} 
Powiązane problemy