Je veux créer une catégorie de ma classe swift existante, mais il n'y a pas d'option dans l'IDE pour le faire.
Une idée si la catégorie existe dans le projet swift? Ou comment obtenir des fonctionnalités similaires dans un projet rapide?
swift
swift-extensions
Khawar
la source
la source
extension
.Réponses:
Dans Swift, vous pouvez utiliser
Extensions
pour ajouter de nouvelles fonctionnalités aux classes, structures et types d'énumération existants.Ils diffèrent des catégories Objective-C de plusieurs manières, principalement:
Dans l'état actuel des choses, les extensions peuvent:
La syntaxe de base pour déclarer une extension est la suivante:
extension SomeType { // new functionality to add to SomeType goes here }
Consultez la documentation d' Apple pour plus d'informations sur l'utilisation des extensions dans Swift.
la source
En Objective C, elles étaient appelées catégories , mais en Swift, elles sont appelées extensions . Le but des deux est de donner des fonctionnalités supplémentaires aux classes existantes sans avoir à créer de sous-classes.
J'avais lu sur les extensions dans la documentation, mais je ne comprenais pas vraiment comment en utiliser une dans mon projet avant de regarder ce tutoriel vidéo ( version YouTube , source github ).
Voici un résumé tiré de la vidéo expliquant comment le faire.
Ajouter un fichier Swift à votre projet
Faites un clic droit dans le navigateur de projet et choisissez "Nouveau fichier ..."
Sélectionnez "Swift File"
La convention consiste à enregistrer le nom du fichier sous le nom de classe que vous étendez plus (avec un signe «+») ce que vous lui faites. Par exemple, "UIImage + Cropping".
Écrivez le code de l'extension
Ouvrez le nouveau fichier Swift que vous venez de créer.
Vous devez importer
UIKit
(au lieu deFoundation
) si vous étendez un fichierUIView
. Utilisez ensuite leextension
mot - clé avant le nom de la classe que vous souhaitez étendre. Vous pouvez ensuite ajouter vos propres nouvelles méthodes à la classe. (Notez que les extensions servent à ajouter de nouvelles méthodes, pas à remplacer les méthodes existantes - d'où le nom.)Dans la vidéo, l'exemple consistait à ajouter une méthode qui recadre un cercle de l'image et lui donne une bordure.
import UIKit extension UIImage { func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage { // code to create the cropped circle with colored border return newImage } }
Voir ici pour l'exemple complet.
Utilisez votre extension n'importe où dans votre projet
Vous pouvez maintenant utiliser votre nouvelle méthode pour cette classe n'importe où dans votre code, tout comme elle faisait partie de la classe standard.
Voici l'exemple de la vidéo ( sur 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) } }
La méthode
cropToCircleWithBorderColor
n'est pas une partie standard deUIImage
, mais comme vous pouvez le voir, elle est utilisée comme elle l'était.Pour complément d'étude:
la source
Dans Swift, cela s'appelle Extensions ! Vérifiez-le
la source
extension
s ne peut pas inclure de variables, qui rendent les choses totalement différentes.Vous pouvez utiliser le code suivant dans votre classe existante
extension name{ func funcName(){ } }
la source