[OC]一个括号新建一个类
[OC]一个括号新建一个类
特别说明
以下代码仅仅用于说明用途,命名也不是特别规范,小朋友不要模仿哦。
前言
在iOS开发中,我们会经常用到这么一段代码:
UIView *myView = [UIView new];
myView.backgroundColor = [UIColor blackColor];
myView.layer.borderWidth = 2.f;
myView.layer.borderColor = [UIColor redColor].CGColor;
[self addSubview:myView];
这么看起来貌似没什么问题,实际上也可以编译运行,但是随着不断地编写代码,我们会写出这些代码:
UIView *myView1 = [UIView new];
myView1.backgroundColor = [UIColor blackColor];
myView1.layer.borderWidth = 12.f;
myView1.layer.borderColor = [UIColor whiteColor].CGColor;
[self addSubview:myView1];
UIView *myView2 = [UIView new];
myView2.backgroundColor = [UIColor blackColor];
myView2.layer.borderWidth = 7.f;
myView2.layer.borderColor = [UIColor redColor].CGColor;
[self addSubview:myView2];
UIView *myView3 = [UIView new];
myView3.backgroundColor = [UIColor yellowColor];
myView3.layer.borderWidth = 3.f;
myView3.layer.borderColor = [UIColor blueColor].CGColor;
[self addSubview:myView3];
所以这个时候我们会看到我们的代码编程一坨一坨的样子,非常难看,这个时候就需要一个小小的办法提升一下代码的可读性。这个方法实际上最早来源于GCC,并被继承到clang中来。
Statements and Declarations in Expressions
我们进行赋值操作的时候一般是这么操作的:
CGFloat t1 = 1.2;
CGFloat t2 = 3.1;
CGFloat a = t1 + t2;
实际上我们还能这么操作:
CGFloat a = ({
CGFloat t1 = 1.2;
CGFloat t2 = 3.1;
CGFloat result = t1 + t2;
result;
});
实际上就是以小括号内嵌花括号,花括号中可以用写多行代码,最后一句则是你要返回的结果。
最后我们再安排一下最开始的那一大坨代码。
UIView *myView1 = ({
UIView *view = [UIView new];
view.backgroundColor = [UIColor blackColor];
view.layer.borderWidth = 12.f;
view.layer.borderColor = [UIColor whiteColor].CGColor;
view;
});
[self addSubview:myView1];
UIView *myView2 = [UIView new];
myView2.layer.borderWidth = 7.f;
myView2.layer.borderColor = ({
UIView *view = [UIView new];
view.backgroundColor = [UIColor blackColor];
view.layer.borderWidth = 7.f;
view.layer.borderColor = [UIColor redColor].CGColor;
view;
});
[self addSubview:myView2];
UIView *myView3 = ({
UIView *view = [UIView new];
view.backgroundColor = [UIColor yellowColor];
view.layer.borderWidth = 3.f;
view.layer.borderColor = [UIColor blueColor].CGColor;
view;
});
[self addSubview:myView3];
嗯,就这样吧。
求打赏

[OC]一个括号新建一个类的更多相关文章
- Arcpy 遍历每一个要素新建要素类
#方法一:cursor= arcpy.da.SearchCursor(aim_fc,["OID@","SHAPE@"]) for row in cursor: ...
- 新建一个类并绑定一个activity
1.新建一个类(.java 文件),继承Android.app.Activity 2.新建一个activity 文件 3.重写onCreate 方法,设置绑定activity 文件 @Override ...
- Android 新建一个类,在src新建一个类,使继承自活动
一:先新建一个包 右键src,新建包: 二:包中新建类 右建包,新建类,将超类改为andorid.app.Activity
- springBoot 自动配置原理--自己新建一个 starter
上篇我们说到 springboot 和 SSM 框架的区别,今天我们就看看 springboot 到底为我们做了哪些事情,让我们开发变得如此简单. springboot 中起着重要作用的是 start ...
- Visual Studio 下C#编译器在解析属性名时如果增加一个get_[您的另一个已经包含在类中属性名]的属性会报错,微软大哥这是什么鬼?
假设在在我们的vs环境新建一个类 copy以下代码,表面看好像一切都没有问题. using System; using System.Collections.Generic; using System ...
- 新建一个UI窗口-XproerUI(MFC)教程
版权所有 2009-2015 荆门泽优软件有限公司 保留所有权利 产品首页:http://www.ncmem.com/apps/xproerui/index.asp 在线文档(XproerUI):Xp ...
- Android中使用自身携带的Junit新建一个测试工程
1.新建立一个Android工程 package com.shellway.junit; public class Service { public int divide(int a,int b){ ...
- 新建一个Activity通过按钮打开它,再通过按钮关闭它
首先需要创建一个供打开和关闭的Activity,先在scr下当前项目的包中创建一个新类Activity1, 并选择让其继承自Activity类,如下图所示: 之后配置AndroidMainifest. ...
- 新建一个mybatis HelloWorld
1.下载mybatis https://github.com/mybatis/mybatis-3/ 没有梯子好像打不开 下载一个最新版本,我这里下载的是mybatis-3.4.1.zip 里面有myb ...
- Intellij IDEA 新建一个EJB工程(三)
之前都是用IDEA启动JBoss服务器,并在启动的同时将EJB项目部署上去.在构建 artifacts 时遇到很多问题,明明是EJB项目却不能用EJB导出,真是奇怪~~ 后来用Web Applicat ...
随机推荐
- [FAQ] FinalCutPro 事件如何支持多个时间线
左侧是建立的事件,右侧是默认的项目(也就是时间线上的剪辑项目). 如果需要这个事件里再弄一个时间线(比如剪辑另一个版本),左侧的事件上右击新建项目: 另一个项目,在这上面可以继续时间线的创作,等于是选 ...
- WPF 解决 Skia 因为找不到字体而绘制不出中文字符
在 WPF 使用 Skia 做渲染工具,如果绘制的中文都是方块,也许是字体的问题.字体的问题是 Skia 没有找到字体,本文告诉大家如何修复 在 Skia 使用特定字体,可以使用 SkiaSharp ...
- spannerlib优雅的go异常处理
蹩脚的go 异常处理 一般写go的人,如果他不是写算法,正常写业务代码的话,可能都会为优雅的异常处理而烦恼,因为脑子抽筋的go设计者们,总是感觉语法糖是一种很低级的东西.但是在我们大多数公司的业务逻辑 ...
- RT-Thread线程管理
一.概述 这是我学习RT-Thread线程管理过程中记录的笔记,方便自己查看,仅供参考,有什么不对的地方忘各位大佬指出.想要了解更详细的内容,请浏览官方文档"线程管理" 如下图所示 ...
- sendmail发送慢的问题
1.使用python的脚本,发送邮件.代码如下: 点击查看代码 [root@ZabbixServerMasterNode ~]# cd /etc/zabbix/alertscripts/ [root@ ...
- 01.Markdown 语法
标题 # 一级标题 ## 二级标题 ### 三级标题 ...(最多六级标题) 字体 **hello**:粗体 *hello*:斜体 三个*:粗体+斜体 ~~hello~~:删除线 引用 > 引用 ...
- HTTPS 是如何进行安全传输的 ?
概述 现代密码学对信息的处理主要离不开以下的三种形式: 摘要:主要用于数据校验,例如存储密码等,摘要是对信息进行单向的哈希,改变信息的原有形态,因为哈希函数的特点是易变性(即使微小的变化也会产生完全不 ...
- csapp-attacklab(完美解决版)
注意:必须阅读Writeup,否则根本看不懂这个lab要怎么做 实验前准备 1.在终端中输入./ctarget和./rtarget结果报错 百度后得知自学的同学需要在执行文件时加上-q参数,不发送结果 ...
- [从零学习C++][01]如何在Clion中定义多个main函数
在一个Clion项目中定义多个main函数编译的时候会报这个错误 显示就是main函数重复了,查阅了下好像可以通过修改CMakeList.txt来修改,将其定义成两个独立的executable即可 a ...
- MySQL日志文件简记
日志文件 binlog binlog主要记录了MySQL数据库执行了更改的所有操作,主要用来做主从复制,数据恢复 记录模式: Statement模式:每一条回修改数据的sql都会被记录在日志中 Row ...