2015-07-02 14 views
8

Chcę dostosować jeden UITextField z jakiegoś powodu. Więc obecnie podklasowałem to i dodałem kilka metod.Subclassing vs Extension in swift

Zamiast tego mogę użyć rozszerzenia na UITextField? Które podejście jest dobre? Proszę wytłumacz !

+2

** Powinieneś wyjaśnić, co chcesz robić **. Niektóre rzeczy można zrobić z dziedziczeniem, ale nie z rozszerzeniami, a inne rzeczy mają sens z rozszerzeniami, ale nie z dziedziczeniem. Twoje pytanie "tak jak jest" jest zbyt ogólne. Nie ma odpowiedzi na twoje pytanie, tak samo jak nie ma mądrej odpowiedzi na pytanie "co jest lepsze, samochód czy śmigłowiec"? – Antonio

+0

dowolny kod, przykład, co dokładnie chcesz zmodyfikować w zachowaniu pola tekstowego? –

Odpowiedz

39

Zgodnie z ogólną regułą (YMMV):

  • Czy dodanie funkcjonalności ogólnego przeznaczenia, które powinny być dostępne dla każdego UITextField? Jeśli tak, zrób rozszerzenie. Wszystkie instancje UITextField mogą wywoływać nowe metody.
  • Czy dodajesz funkcje, które powinny być ograniczone do specjalnych instancji UITextField, które dokładnie określisz? Jeśli tak, zrób podklasę. Tylko instancje podklasy mogą korzystać z nowych metod.

Istnieją inne kwestie techniczne, np. Rozszerzenia nie mogą dodawać pól.

+0

Doskonała odpowiedź. Masz na myśli to, że jeśli napiszesz rozszerzenie * to * co drugi kontroler widoku, gdziekolwiek on będzie, może to zobaczyć? Czy musimy używać dowolnego "publicznego", "wewnętrznego" atrybutu czy czegoś takiego? – Honey

+0

@Honey To zależy od zakresu, którego potrzebujesz: gdzie musisz użyć 'extension'? – notsoux