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.
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
@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
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