J'essaie de créer une «usine d'étiquettes» qui m'aidera à produire des étiquettes pour un projet.Syntaxe pour l'appel de plusieurs paramètres par défaut
J'ai une fonction
getLabel(of type: LabelTypeEnum,
_ labelTitle: String? = nil,
_ textColor: UIColor? = nil,
_ textAlignment: NSTextAlignment? = nil) -> Label
Je veux alors appeler avec un certain nombre de paramètres, par exemple:
getLabel(of: .myLabel, .center)
qui se traduit par l'erreur: '? String' "Type Comment est-ce que je dis au compilateur que .center n'est pas la propriété labelTitle?
J'ai essayé de spécifier le contenu en ajoutant "alignment: .center" mais cela me force à le supprimer.
Si c'est utile, j'adapterai le contexte du code ci-dessous.
static func getLabel(of type: LabelType,
_ labelTitle: String? = nil,
_ textColor: UIColor? = nil,
_ textAlignment: NSTextAlignment? = nil) -> Label {
switch type {
case .regular:
return RegularLabel(labelTitle, textColor, textAlignment)
case .title:
return TitleLabel(labelTitle, textColor, textAlignment)
case .description:
return DescriptionLabel(labelTitle, textColor, textAlignment)
case .header:
return HeaderLabel(labelTitle, textColor, textAlignment)
case .subHeader:
return SubHeaderLabel(labelTitle, textColor, textAlignment)
case .body:
return BodyLabel(labelTitle, textColor, textAlignment)
case .fatBody:
return FatBodyLabel(labelTitle, textColor, textAlignment)
case .smallGray:
return SmallGrayLabel(labelTitle, textColor, textAlignment)
}
}
Étiquette d'initialisation
convenience init(_ title: String? = nil, _ color: UIColor? = nil, _ alignment: NSTextAlignment? = nil) {
self.init(frame: .zero)
self.text = title ?? self.text
self.textColor = color ?? self.textColor
self.textAlignment = alignment ?? self.textAlignment
}
Un des nombreux appels
private lazy var titleLabel: UILabel = {
let label = LabelFactory.getLabel(of: .header, .center)
self.addSubview(label)
return label
}()