【发布时间】:2017-06-30 14:04:22
【问题描述】:
我正在尝试创建一个“标签工厂”来帮助我为项目制作标签。
我有一个函数
getLabel(of type: LabelTypeEnum,
_ labelTitle: String? = nil,
_ textColor: UIColor? = nil,
_ textAlignment: NSTextAlignment? = nil) -> Label
然后我想用任意数量的参数调用它,例如:
getLabel(of: .myLabel, .center)
这会导致错误:“ Type 'String?'没有成员'中心'"
如何告诉编译器 .center 不是 labelTitle 属性?
我试图通过添加“alignment: .center”来指定内容,但它迫使我将其删除。
如果有任何帮助,我会在下面添加代码的上下文。
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)
}
}
标签初始化
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
}
许多调用之一
private lazy var titleLabel: UILabel = {
let label = LabelFactory.getLabel(of: .header, .center)
self.addSubview(label)
return label
}()
【问题讨论】:
标签: swift parameters default optional-parameters multiple-value