Chcę utworzyć kategorię mojej istniejącej klasy Swift, ale w IDE nie ma takiej opcji.
Masz jakiś pomysł, czy kategoria istnieje w szybkim projekcie? Albo jak osiągnąć podobną funkcjonalność w szybkim projekcie?
swift
swift-extensions
Khawar
źródło
źródło
extension
.Odpowiedzi:
W języku Swift możesz
Extensions
dodać nową funkcjonalność do istniejących klas, struktur i typów wyliczeniowych.Różnią się one od kategorii Cel-C na kilka sposobów, głównie:
W obecnej formie rozszerzenia mogą:
Podstawowa składnia deklarowania rozszerzenia jest następująca:
extension SomeType { // new functionality to add to SomeType goes here }
Sprawdź dokumentację Apple, aby uzyskać więcej informacji na temat korzystania z rozszerzeń w Swift.
źródło
W celu C nazywano je kategoriami , ale w języku Swift nazywane są rozszerzeniami . Ich celem jest nadanie dodatkowej funkcjonalności istniejącym klasom bez konieczności tworzenia podklas.
Czytałem o rozszerzeniach w dokumentacji, ale tak naprawdę nie rozumiałem, jak ich używać w moim projekcie, dopóki nie obejrzałem tego samouczka wideo ( wersja YouTube , źródło github ).
Oto podsumowanie zaczerpnięte z filmu, jak to zrobić.
Dodaj plik Swift do swojego projektu
Kliknij prawym przyciskiem myszy w Nawigatorze projektu i wybierz „Nowy plik ...”
Wybierz „Swift File”
Konwencja polega na zapisaniu nazwy pliku jako nazwy rozszerzanej klasy oraz (ze znakiem „+”), co z nim robisz. Na przykład „UIImage + przycinanie”.
Napisz kod rozszerzenia
Otwórz nowy plik Swift, który właśnie utworzyłeś.
Powinieneś zaimportować
UIKit
(zamiastFoundation
), jeśli rozszerzasz plikUIView
. Następnie użyjextension
słowa kluczowego przed nazwą klasy, którą chcesz rozszerzyć. Następnie możesz dodać własne nowe metody do klasy. (Uwaga, rozszerzenia służą do dodawania nowych metod, a nie zastępowania istniejących metod - stąd nazwa).W filmie przykładem było dodanie metody, która wycina okrąg z obrazu i nadaje mu ramkę.
import UIKit extension UIImage { func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage { // code to create the cropped circle with colored border return newImage } }
Zobacz tutaj pełny przykład.
Używaj swojego rozszerzenia w dowolnym miejscu w projekcie
Teraz możesz użyć swojej nowej metody dla tej klasy w dowolnym miejscu w kodzie, tak jakby była częścią standardowej klasy.
Oto przykład wideo ( na github ):
import UIKit class ViewController: UIViewController { @IBOutlet var imageView : UIImageView = nil override func viewDidLoad() { super.viewDidLoad() let img = imageView.image imageView.image = img.cropToCircleWithBorderColor(UIColor(red:0.91, green:0.34, blue:0.16, alpha:1.00), lineWidth: 20) } }
Metoda
cropToCircleWithBorderColor
nie jest standardową częścią programuUIImage
, ale jak widać, jest używana tak, jak była.Do dalszych badań:
źródło
W Swift nazywa się Extensions ! Sprawdź to
źródło
extension
nie może zawierać zmiennych, które sprawiają, że rzeczy są zupełnie inne.Możesz użyć następującego kodu w swojej istniejącej klasie
extension name{ func funcName(){ } }
źródło