w Objective-C, jeśli chciałem użyć określonej klasy, który jest obecny tylko w nowej wersji iOS, chciałbym zrobić coś takiego:Jak wykonać słabe linkowanie w Swift?
if([UIBlurEffect class]) {
// do something with UIBlurEffect
}
else {
// gracefully fallback to old behavior
}
jednak równoważne Swift:
if UIBlurEffect.self != nil {
let blur: UIBlurEffect = UIBlurEffect(...)
// ...
else {
// ...
}
// also occurs with NSClassFromString("UIBlurEffect")
nie ma tej samej funkcjonalności.
Jeśli jest dostępny w środowisku, w którym dostępne jest NSNewFeature
, wszystko jest w porządku. Ale jeśli klasa nie jest zdefiniowana, pojawia się błąd łącza podczas uruchamiania aplikacji:
dyld: Symbol not found: _OBJC_CLASS_$_UIBlurEffect
Więc jak mam zrobić słabe powiązanie w Swift?
Edytuj Dodano UIBlurEffect
jako konkretny przykład.
możliwe duplikat [ Co to jest preprocesor Swift równoważny z wersją sprawdzania wersji systemu iOS?] (Http://stackoverflow.com/questions/24166919/what-is-the-swift-preprocessor-equivalent-to-ios-version-check-compar ison) – user102008
Domyślam się, że powinieneś użyć opcji opcjonalnej, coś jak na przykład featureAvailable = NSNewFeature? {} else {}. Ale jestem całkiem nowy na szybki – Andrea
Niestety NSNewFeature.self – Andrea