美文网首页
Swift中通过泛型封装可复用视图。

Swift中通过泛型封装可复用视图。

作者: liaoworkinn | 来源:发表于2021-04-06 10:33 被阅读0次

下面会讲一个Demo来介绍一下泛型的很不错的使用场景

假设有一个需求是做一个自动的滚动视图 这里假设是自定义的VScrollView

橘黄色的滚动视图

后来产品想再做一个下面的滚动视图:

灰色的滚动视图

在OC中我们比较常用的是解决方案是把内部具体UI布局的UIVIew封装成一个类,然后传入到支持滚动的View中。

OC中不使用泛型的写法: 下面是伪代码

/// 负责管理滚动的父视图
class VScrollView: UIView {

    var topView: UIView
    var bottomView: UIView

    func configBaseUI() {
        // 添加topView和bottomView。
    }

    func scroll() {
        // 视图向上滚动
    }

}

/// 第一个GIF中 橘黄色 左边图片右边文字的视图
class YellowItemView: UIView {
    /// 内部布局代码略
}

// 使用
let vScrollView = VScrollView()
vScrollView.topView = YellowItemView()
vScrollView.bottomView = YellowItemView()
vScrollView.configBaseUI()
// 开始滚动视图
vScrollView.scroll()


/// 第二个GIF中 灰色 只有文字的视图
class GrayItemView: UIView {
    /// 内部布局代码略
}

// 具体使用同YellowItemView,略。

在Swift中我们可以通过泛型去统一处理两种视图, 只有在调用的时候才考虑具体类型。

class VScrollView<T: UIView>: UIView {
    var topView: T
    var bottomView: T

    override init(frame: CGRect) {
      super.init(frame: .zero)
      configBaseUI()
    }    
    func configBaseUI() {
         // 添加topView和bottomView。
        addSubView(topView)
        addSubView(bottomView)
    }

    func scroll() {
       // 视图向上滚动
    }
}

// 具体使用
let yellowVScrollView = GymNewMarqueeView<YellowItemView>()
yellowVScrollView.scroll()
let grayVScrollView = GymNewMarqueeView<GrayItemView>()
yellowVScrollView.scroll()

Demo只对泛型简化封装可复用视图的思路做解释,具体语法和代码依据实际项目。

如果想统一配置数据的方法,可以使用协议的方式来实现。

相关文章

  • Swift中通过泛型封装可复用视图。

    下面会讲一个Demo来介绍一下泛型的很不错的使用场景 假设有一个需求是做一个自动的滚动视图 这里假设是自定义的VS...

  • Swift 泛型函数学习

    Swift Kotlin UITableViewCell 复用泛型封装 UICollectionViewCell ...

  • Swift 运用协议泛型封装网络层

    Swift 运用协议泛型封装网络层 Swift 运用协议泛型封装网络层

  • 2021-12-01

    swift5基本语法-泛型函数和泛型类型 Swift中泛型可以将类型参数化,提高代码复用率,减少代码量。 一、泛型...

  • Swift-泛型笔记

    Swift 泛型 Swift 提供了泛型让你写出灵活且可重用的函数和类型。 Swift 标准库是通过泛型代码构建出...

  • Swift 泛型(Generics)

    学习记录,有搬运 Swift泛型能够让你根据自己的需求,写出通用于的,灵活的,可复用的函数。泛型是Swfit最强大...

  • 泛型

    Swift 提供了泛型让你写出灵活且可重用的函数和类型。Swift 标准库是通过泛型代码构建出来的。Swift 的...

  • Swift 泛型

    Swift 提供了泛型让你写出灵活且可重用的函数和类型。Swift 标准库是通过泛型代码构建出来的。Swift 的...

  • Swift 泛型

    Swift 提供了泛型让你写出灵活且可重用的函数和类型。Swift 标准库是通过泛型代码构建出来的。Swift 的...

  • Swift 泛型

    Swift 提供了泛型让你写出灵活且可重用的函数和类型。Swift 标准库是通过泛型代码构建出来的。Swift 的...

网友评论

      本文标题:Swift中通过泛型封装可复用视图。

      本文链接:https://www.haomeiwen.com/subject/xedskltx.html