- Co to jest @objcwnioskowanie? Co się dzieje?
W Swift 3kompilator dokonuje wyboru @objcw wielu miejscach, więc nie musisz tego robić. Innymi słowy, dodaje to @objcdla Ciebie!
W Swift 4kompilator już tego nie robi (tyle). Musisz teraz dodać @objcwyraź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_INFERENCEustawienie 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 @objckażdej funkcji lub zmiennej, która musi być narażona na środowisko wykonawcze Objective-C:
@objc func foo() {
}
Drugim jest użycie @objcMembersprzez Classdeklarację. Zapewnia to automatyczne dodawanie @objcdo 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 @objci dlaczego jest konieczne?
Jeśli wprowadzisz nowe metody lub zmienne do klasy Swift, oznaczenie ich jako @objcnaraż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: