文档章节

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

她吃西红柿
 她吃西红柿
发布于 2016/12/07 13:54
字数 484
阅读 248
收藏 10

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


        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 = {
            $0.backgroundColor = .green
            $0.frame = CGRect(x: 100, y: 200, width: 100, height: 100)
            return $0
        }(UIView())
        self.view.addSubview(greenView)

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

Git地址

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


import Foundation
import CoreGraphics

public 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 {
    ///       $0.origin.x = 10
    ///       $0.size.width = 100
    ///     }
    public func with(_ block: (inout Self) -> Void) -> Self {
        var copy = self
        block(&copy)
        return copy
    }
    
    /// Makes it available to execute something with closures.
    ///
    ///     UserDefaults.standard.do {
    ///       $0.set("devxoul", forKey: "username")
    ///       $0.set("devxoul@gmail.com", forKey: "email")
    ///       $0.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 {
    ///       $0.textAlignment = .Center
    ///       $0.textColor = UIColor.blackColor()
    ///       $0.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 {}

##NB写法 例如


        let label = UILabel().then {
        $0.frame = CGRect(x: 100, y: 300, width: 100, height: 100)
            $0.text = "测试"
            $0.backgroundColor = .purple
            $0.textAlignment = .center
            $0.font = UIFont.systemFont(ofSize: 19)
        }
        self.view.addSubview(label)

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

输入图片说明

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

© 著作权归作者所有

她吃西红柿
粉丝 43
博文 52
码字总数 25812
作品 0
杭州
iOS工程师
私信 提问
Swift编程高级教程

常量与变量 常量和变量是某个特定类型的值的名字,如果在程序运行时值不能被修改的是一个常量,反之是一个变量。 常量和变量的声明 Swift中的常量和变量在使用前必须先声明。其中let关键字声...

xiahuawuyu
2016/01/11
179
0
Swift中构造方法的解析

Swift中构造方法的解析 一、引言 构造方法是一个类创建对象最先也是必须调用的方法,在Objective-C中,开发者更习惯称这类方法为初始化方法。在Objective-C中的初始化方法与普通函数相比除了...

珲少
2016/04/15
447
0
swift4.0-11 类和结构体

代码学习swift4.0, 类和结构体 // // main.swift // SwiftLearn11-类和结构体 // // Created by iOS on 2018/5/7. // Copyright © 2018年 weiman. All rights reserved. // import Foundat......

小曼Study
2018/05/07
0
0
Swift 编程风格指南

这是一份raywenderlich的Swift编程风格指南,中文版由@mrahmiao翻译,你可以前往Github访问这个项目。 因为该指南关注于网页上以及打印版的可读性,所以它可能与你阅读过的指南有所不同。为了...

法斗斗
2016/03/01
58
0
Swift解读专题一——Swift2.2语言预览

专题一——Swift2.2语言预览 一、引言 本系列专题是我通过阅读Swift2.2语言开发文档,翻译总结加上自己的理解整理而成。其中大部分结构和内容都来自开发文档,有疏漏和错误之处,还望更多朋友...

珲少
2016/05/05
835
0

没有更多内容

加载失败,请刷新页面

加载更多

golang初探与命令源码分析

前段时间有群友在群里问一个go语言的问题: 就是有一个main.go的main函数里调用了另一个demo.go里的hello()函数。其中main.go和hello.go同属于main包。但是在main.go的目录下执行go run main...

码农实战
24分钟前
7
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
9
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
9
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
9
0
HTML5+CSS3从入门到精通 中文pdf版​

本文转载于:专业的前端网站➵HTML5+CSS3从入门到精通 中文pdf版 HTML5+CSS3从入门到精通是通过基础知识+中小实例+综合案例的方式,讲述了用HTML5+ CSS3设计构建网站的必备知识,相对于专业指...

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部