UIView 子类的 Swift 通用方法

Posted

技术标签:

【中文标题】UIView 子类的 Swift 通用方法【英文标题】:Swift Generic methods for UIView subclasses 【发布时间】:2018-09-13 10:51:28 【问题描述】:

我想为UIButtonUILabelUIViewUITextView 等所有控件创建一个通用方法,以便为每个控件绘制下划线。

上面的类可以写这样的方法吗?

【问题讨论】:

【参考方案1】:

由于所有元素都继承自UIView,你可以试试

extension UIView 
 func addUnderline() 
   // create underline view add it with addSubview
 

你可以从任何元素调用它

UIButton().addUnderline()
UILabel().addUnderline()

等等

【讨论】:

【参考方案2】:

如果你真的想使用 Swift 泛型,你可以这样写:

func addUnderline<V>(inView view: V, withHeight height: CGFloat, andColor color: UIColor) where V: UIView 
    let underlineHeight: CGFloat = height
    let underlineView = UIView(frame: CGRect(x: 0, y: view.frame.height - underlineHeight, width: view.frame.width, height: underlineHeight))
    underlineView.backgroundColor = color
    view.addSubview(underlineView)
  

【讨论】:

以上是关于UIView 子类的 Swift 通用方法的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Swift 中的 ViewController 获取 UIView 子类实例

无法访问 Swift 子类中的 oc 类别方法

Swift:有一种方法可以让仅某些子类有权访问超类的扩展

为任何通用父类定义的子类[重复]

如何覆盖子类的 swift 协议函数(例如 UIView 中的 UILabel)

将类型传递给通用 Swift 扩展,或者理想情况下推断它