我有以下代码。如何将其合并为一个扩展名?
extension UITextView {
func setAccessibility(fontSize : UIFont.TextStyle) {
self.font = .preferredFont(forTextStyle: fontSize)
self.adjustsFontForContentSizeCategory = true
}
}
extension UITextField {
func setAccessibility(fontSize : UIFont.TextStyle) {
self.font = .preferredFont(forTextStyle: fontSize)
self.adjustsFontForContentSizeCategory = true
}
}
extension UILabel {
func setAccessibility(fontSize : UIFont.TextStyle) {
self.font = .preferredFont(forTextStyle: fontSize)
self.adjustsFontForContentSizeCategory = true
}
}
玩得开心!!
extension UIContentSizeCategoryAdjusting {
func setAccessibility(fontSize : UIFont.TextStyle) {
switch self {
case let self as UILabel: self.font = .preferredFont(forTextStyle: fontSize)
case let self as UITextView: self.font = .preferredFont(forTextStyle: fontSize)
case let self as UITextField: self.font = .preferredFont(forTextStyle: fontSize)
default:
break
}
adjustsFontForContentSizeCategory = true
}
}
let label = UILabel()
let field = UITextField()
let view = UITextView()
label.setAccessibility(fontSize: .body)
field.setAccessibility(fontSize: .body)
view.setAccessibility(fontSize: .body)
前一段时间,我偶然发现了类似的东西,但最终找到了最佳解决方案,我在这里发布了它。制定一个协议,并在协议扩展中添加方法实现,然后确认该扩展中所有必需的类:
protocol AccessibilitySettable: AnyObject {
var font: UIFont? { get set }
var adjustsFontForContentSizeCategory: Bool { get set }
func setAccessibility(fontSize: UIFont.TextStyle)
}
extension AccessibilitySettable {
func setAccessibility(fontSize: UIFont.TextStyle) {
font = .preferredFont(forTextStyle: fontSize)
adjustsFontForContentSizeCategory = true
}
}
extension UITextField: AccessibilitySettable { }
extension UITextView: AccessibilitySettable { }
注意:UILabel
具有解包的font!
属性,而不是可选属性,因此无法确认相同的协议。