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?
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.
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.
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".
Ouvrez le nouveau fichier Swift que vous venez de créer.
Vous devez importer UIKit
(au lieu de Foundation
) si vous étendez un fichier UIView
. Utilisez ensuite le extension
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.
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 de UIImage
, mais comme vous pouvez le voir, elle est utilisée comme elle l'était.
Dans Swift, cela s'appelle Extensions ! Vérifiez-le
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(){
}
}
extension
.