美文网首页swiftSwiftSwift
iOS - Swift协议库Then的用法

iOS - Swift协议库Then的用法

作者: 俺不是大佬儿 | 来源:发表于2022-04-15 23:16 被阅读0次

最近在学习Swift开发项目,一些常用的第三方库也在尝试使用,好的类库可以提高代码质量开拓编程思路,今天分享Then初始化库

原理:定义了一个Then协议,对Then协议进行扩展并指定约束范围为AnyObject、Any并利用闭包地形式在类实例、结构体实例初始化时返回了实例本身,由于库中让NSObject遵循Then协议所以对所有继承自NSObject的类型初始化都可用

用法

1.无需名参数使用$0替代

    private lazy var searchBtn = UIButton().then {
        $0.setImage(UIImage(named: "classify_search_btn"), for: .normal)
        $0.setTitle("忍者", for: .normal)
        $0.setTitleColor(UIColor.white, for: .normal)
        $0.titleLabel?.font = UIFont.systemFont(ofSize: 13)
        $0.titleLabel?.textAlignment = NSTextAlignment.left
        $0.backgroundColor = UIColor(r: 1, g: 1, b: 1, a: 0.5)
        $0.backgroundColor = .theme_color
    }
在闭包外初始化一个searchBtn对象,再传进闭包进行设值,统一用取参数$0代替对象searchBtn

2.显式命名参数

    private lazy var VIPBtn = UIButton().then { btn
        in
        btn.imagePosition(style: .left, spacing: 3.0)
        btn.setImage(UIImage(named: "home_2_default"), for: .normal)
        btn.setTitle("VIP", for: .normal)
        btn.setTitleColor(.white, for: .normal)
        btn.titleLabel?.font = .systemFont(ofSize: 14)
    }

正常在使用lazy进行懒加载的初始化方式需要用下面的形式

    private lazy var VIPBtn: UIButton = {
        let btn = UIButton()
        btn.imagePosition(style: .left, spacing: 3.0)
        btn.setImage(UIImage(named: "home_2_default"), for: .normal)
        btn.setTitle("VIP", for: .normal)
        btn.setTitleColor(.white, for: .normal)
        btn.titleLabel?.font = .systemFont(ofSize: 14)
        return btn
    }()

需要在闭包中初始化 let btn = UIButton() 并最后return btn

对于储值类型的结构体同样可以使用,用with 协议方法

   let dframe = CGRect().with{
          $0.origin.x = 12
          $0.size.width = 20
    }
  let dframe = CGRect().with { f in
        f.size.width = 10
        f.size.height = 20
        f.origin.x = 30
        f.origin.y = 12
    }

直接在闭包内执行操作

   let usera = UserDefaults.standard.then { u in
        u.set("swift", forKey: "username")
        u.set("study", forKey: "password")
        u.synchronize()
    }
    
    let user = UserDefaults.standard.do {
        $0.set("swift", forKey: "username")
        $0.set("study", forKey: "password")
        $0.synchronize()
    }

\color{gray}{若有理解错误的地方欢迎大佬儿来指正纠错,共同学习😏!!}

相关文章

  • iOS - Swift协议库Then的用法

    最近在学习Swift开发项目,一些常用的第三方库也在尝试使用,好的类库可以提高代码质量开拓编程思路,今天分享The...

  • 2018裂变之iOS第三方库,App优化

    朋友们,不要太感谢我!!! Swift版:iOS第三方库、插件、大牛博客[Swift版] Git用法 git-re...

  • Swift学习笔记-协议

    Swift中的协议类似于Java中的接口,不过在Swift中,结构体,枚举,类都能使用协议 基本用法 符合多个协议...

  • 我从55个Swift标准库协议中学到了什么?

    我从55个Swift标准库协议中学到了什么? 我从55个Swift标准库协议中学到了什么?

  • 协议(三)

    标准库中的协议 Swift标准库广泛使用的协议可能会让你感到惊讶。理解协议在Swift中扮演的角色可以帮助您编写干...

  • iOS Swift 协议的基本用法protocol

    简介 记录swift下协议的用法,与oc基本类似,基本一对一 1、定制协议 2、声明 3、使用 传输 4、遵守协...

  • Swift 5.1 (20) - 协议

    级别: ★☆☆☆☆标签:「iOS」「Swift 5.1 」「协议」作者: 沐灵洛审校: QiShare团队 协议定...

  • Moya和ObjectMapper的学习记录

    Moya Swift - 网络抽象层库Moya的使用详解1(安装配置、基本用法)Swift - 网络抽象层库Moy...

  • Swift协议+代理

    Swift语言开发中使用协议+代理的用法和oc中是一样的,只不过变得是语法。现在就进入swift的协议+代理。 先...

  • Swift项目中使用过的第三方框架

    资源:iOS 开发资源汇总Swift.md 整个iOS Repos的排名(Swift): Repos 网络库: A...

网友评论

    本文标题:iOS - Swift协议库Then的用法

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