Je veux créer une catégorie de ma classe Swift existante), mais il n'y a pas d'option dans IDE pour le faire.
Toute idée si la catégorie existe dans Swift? Ou comment obtenir une fonctionnalité similaire dans Swift??
Dans Swift, vous pouvez utiliser Extensions
pour ajouter de nouvelles fonctionnalités aux classes, structures et types d’énumération existants.
Elles diffèrent des catégories Objective-C de plusieurs manières, principalement:
À l'heure actuelle, 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 documentation d’Apple pour plus d’informations sur l’utilisation des extensions dans Swift.
Dans l'Objectif C, elles s'appelaient catégories , mais dans Swift, elles s'appellent extensions . Elles ont toutes deux pour but de fournir des fonctionnalités supplémentaires aux classes existantes sans avoir à créer des sous-classes.
J'avais lu des informations sur les extensions dans la documentation, mais je ne comprenais pas vraiment comment en utiliser une dans mon projet avant de regarder cette vidéo de tutoriel ( version YouTube , source github ).
Voici un résumé tiré de la vidéo sur la façon de le faire.
Faites un clic droit dans le navigateur de projet et choisissez "Nouveau fichier ..."
Sélectionnez "Fichier Swift"
La convention consiste à enregistrer le nom du fichier sous le nom de la classe que vous étendez et avec (avec un signe "+") ce que vous lui faites. Par exemple, "UIImage + Recadrage".
Ouvrez le nouveau fichier Swift que vous venez de créer.
Vous devriez importer UIKit
(au lieu de Foundation
) si vous étendez un UIView
. Ensuite, utilisez le mot clé extension
avant le nom de la classe à étendre. Vous pouvez ensuite ajouter vos propres nouvelles méthodes à la classe. (Remarque: les extensions servent à ajouter de nouvelles méthodes, sans remplacer les méthodes existantes - d'où le nom.)
Dans la vidéo, l'exemple consistait à ajouter une méthode qui découpe 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, comme si 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 constater, elle est utilisée telle quelle.
Dans Swift il s'appelle Extensions ! jetez un coup d'œil
Vous pouvez utiliser le code suivant dans votre classe existante
extension name{
func funcName(){
}
}