it-swarm.dev

Jak stworzyć Swift klasa dla kategorii?

Chcę utworzyć kategorię mojej istniejącej klasy Swift, ale nie ma opcji w IDE to zrobić).

Każdy pomysł, jeśli kategoria istnieje w projekcie Swift? Lub jak osiągnąć podobną funkcjonalność w projekcie Swift?

84
Khawar

W Swift możesz użyć Extensions, aby dodać nową funkcjonalność do istniejących klas, struktur i typów wyliczeń.

Różnią się one od kategorii Celu C na kilka sposobów, głównie:

  • Nie są nazwani
  • Nie musisz jawnie importować rozszerzenia. Jeśli zdefiniujesz rozszerzenie, aby dodać nową funkcjonalność do istniejącego typu, nowa funkcjonalność będzie dostępna we wszystkich istniejących instancjach tego typu, nawet jeśli zostały utworzone przed zdefiniowaniem rozszerzenia.
  • Jak wspomniano powyżej, działają one nie tylko z klasami, ale także z innymi typami.

W obecnej formie rozszerzenia mogą:

  • Dodaj obliczone właściwości i obliczone właściwości statyczne
  • Zdefiniuj metody instancji i metody typów
  • Zapewnij nowe inicjatory
  • Zdefiniuj indeksy dolne
  • Zdefiniuj i używaj nowych typów zagnieżdżonych
  • Dostosuj istniejący typ do protokołu

Podstawowa składnia do deklarowania rozszerzenia jest następująca:

extension SomeType {
    // new functionality to add to SomeType goes here
}

Sprawdź dokumentacja Apple , aby uzyskać więcej informacji na temat używania rozszerzeń w Swift.

126
Cezar

W Celu C nazwano je kategorie , ale w Swift nazywają się rozszerzenia . Ich celem jest zapewnienie dodatkowej funkcjonalności do istniejących klas bez konieczności tworzenia podklas.

Przeczytałem o rozszerzeniach w dokumentacji, ale tak naprawdę nie rozumiałem, jak używać jednego z nich w moim projekcie, dopóki nie obejrzałem ten film instruktażowy ( wersja YouTube , źródło github ).

Oto podsumowanie zaczerpnięte z wideo, 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 rozszerzanej nazwy klasy oraz (ze znakiem „+”) tego, co robisz. Na przykład „UIImage + Cropping”.

Napisz kod dla rozszerzenia

Otwórz nowy plik Swift, który właśnie utworzyłeś).

Powinieneś zaimportować UIKit (zamiast Foundation), jeśli przedłużasz UIView. Następnie użyj słowa kluczowego extension 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 przycina 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 dla pełnego przykładu.

Użyj rozszerzenia w dowolnym miejscu w projekcie

Teraz możesz użyć nowej metody dla tej klasy w dowolnym miejscu w kodzie, tak jakby była częścią standardowej klasy.

Oto przykład filmu ( 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ą UIImage, ale jak widać, jest używana tak jak wcześniej.

Do dalszych badań:

99
Suragch

W Swift to się nazywa Rozszerzenia ! Sprawdź to

8
iSofTom

Możesz użyć następującego kodu w swojej istniejącej klasie

extension name{
func funcName(){
   } 
}
0
vikrant tanwar