- Co to jest @objc
wnioskowanie? Co się dzieje?
W Swift 3
kompilator dokonuje wyboru @objc
w wielu miejscach, więc nie musisz tego robić. Innymi słowy, dodaje to @objc
dla Ciebie!
W Swift 4
kompilator już tego nie robi (tyle). Musisz teraz dodać @objc
wyraźnie.
Domyślnie, jeśli masz projekt w wersji wcześniejszej niż Swift 4, otrzymasz ostrzeżenia o tym. W projekcie Swift 4 wystąpią błędy kompilacji. Jest to kontrolowane poprzez SWIFT_SWIFT3_OBJC_INFERENCE
ustawienie kompilacji. W projekcie wcześniejszym niż Swift 4 jest to ustawione na On
. Poleciłbym ustawić to na Default
(lub Off
), co jest teraz domyślną opcją w nowym projekcie.
Konwersja wszystkiego zajmie trochę czasu, ale ponieważ jest ona domyślna dla Swift 4, warto to zrobić.
- Jak zatrzymać ostrzeżenia / błędy kompilatora?
Istnieją dwa sposoby konwersji kodu, aby kompilator nie narzekał.
Jednym z nich jest użycie @objc
każdej funkcji lub zmiennej, która musi być narażona na środowisko wykonawcze Objective-C:
@objc func foo() {
}
Drugim jest użycie @objcMembers
przez Class
deklarację. Zapewnia to automatyczne dodawanie @objc
do WSZYSTKICH funkcji i zmiennych w klasie. Jest to prosty sposób, ale ma koszt, na przykład może zwiększyć rozmiar aplikacji, ujawniając funkcje, które nie musiały być ujawniane.
@objcMembers class Test {
}
- Co to jest @objc
i dlaczego jest konieczne?
Jeśli wprowadzisz nowe metody lub zmienne do klasy Swift, oznaczenie ich jako @objc
narażające je na środowisko wykonawcze Objective-C. Jest to konieczne, gdy masz kod Objective-C, który korzysta z klasy Swift lub, jeśli używasz funkcji typu Objective-C, takich jak Selectors
. Na przykład wzorzec cel-działanie:
button.addTarget(self, action:#selector(didPressButton), for:.touchUpInside)
- Dlaczego nie miałbym oznaczać wszystkiego @objc
?
Istnieją negatywy związane z oznaczeniem czegoś jako @objc
:
- Zwiększony rozmiar binarny aplikacji
- Brak przeciążenia funkcji
Proszę pamiętać, że jest to streszczenie na wysokim poziomie i że jest bardziej skomplikowane niż pisałem. Poleciłbym przeczytać aktualną propozycję, aby uzyskać więcej informacji.
Źródła: