发现一种NB的Swift初始化常量的方法

发现一种NB的Swift初始化常量的方法,第1张

概述##传统写法 曾经我们这样初始化一个常量 let redView: UIView = { let view = UIView() view.backgroundColor = .red view.frame = CGRect(x: 100, y: 100, width: 100, height: 100) re

##传统写法 曾经我们这样初始化一个常量

let redVIEw: UIVIEw = {        let vIEw = UIVIEw()            vIEw.backgroundcolor = .red            vIEw.frame = CGRect(x: 100,y: 100,wIDth: 100,height: 100)            return vIEw        }()

OC中也有类似的写法.在Swift中,声明一个常量之后接着的闭包中进行初始化,而不是之后在 vIEwDIDLoad 或其他类似的方法中进行设置,这种写法的确也很不错! 但是否认为直接在闭包中使用vIEw这样的命名方式显得太low了. twitter有一篇推文流传甚广.

他参照了一个gist

仿照上面的写法,在闭包中使用$0,执行时传入一个用来初始化的UIVIEw

使用$0
let greenVIEw: UIVIEw = {            
import Foundationimport CoreGraphicspublic protocol Then {}extension Then where Self: Any {        /// Makes it available to set propertIEs with closures just after initializing and copying the value types.    ///    ///     let frame = CGRect().with {    ///       
let label = UILabel().then {        .frame = CGRect(x: 100,y: 300,height: 100)            .text = "测试"            .backgroundcolor = .purple            .textAlignment = .center            .Font = UIFont.systemFont(ofSize: 19)        }        self.vIEw.addSubvIEw(label)
.origin.x = 10 /// .size.wIDth = 100 /// } public func with(_ block: (inout Self) -> VoID) -> Self { var copy = self block(©) return copy } /// Makes it available to execute something with closures. /// /// UserDefaults.standard.do { /// .set("devxoul",forKey: "username") /// .set("devxoul@gmail.com",forKey: "email") /// .synchronize() /// } public func `do`(_ block: (Self) -> VoID) { block(self) } }extension Then where Self: AnyObject { /// Makes it available to set propertIEs with closures just after initializing. /// /// let label = UILabel().then { /// .textAlignment = .Center /// .textcolor = UIcolor.blackcolor() /// .text = "Hello,World!" /// } public func then(_ block: (Self) -> VoID) -> Self { block(self) return self } }extension NSObject: Then {}extension CGPoint: Then {}extension CGRect: Then {}extension CGSize: Then {}extension CGVector: Then {}
.backgroundcolor = .green .frame = CGRect(x: 100,y: 200,height: 100) return }(UIVIEw()) self.vIEw.addSubvIEw(greenVIEw)

在推文评论中有哥们推荐了一个日本小伙子封装的库,瞬间感觉好NB

Git地址

其实也没多少代码 直接复制代码就能用

##NB写法 例如

三种方法同样可以做到初始化一个常量 不是你认为哪种更加酷呢哈哈哈

欢迎打赏 点赞,收藏,关注博主 iOS技术交流群 482478166

总结

以上是内存溢出为你收集整理的发现一种NB的Swift初始化常量的方法全部内容,希望文章能够帮你解决发现一种NB的Swift初始化常量的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1069153.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存