[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]一个括号新建一个类的更多相关文章

  1. Arcpy 遍历每一个要素新建要素类

    #方法一:cursor= arcpy.da.SearchCursor(aim_fc,["OID@","SHAPE@"]) for row in cursor: ...

  2. 新建一个类并绑定一个activity

    1.新建一个类(.java 文件),继承Android.app.Activity 2.新建一个activity 文件 3.重写onCreate 方法,设置绑定activity 文件 @Override ...

  3. Android 新建一个类,在src新建一个类,使继承自活动

    一:先新建一个包 右键src,新建包: 二:包中新建类 右建包,新建类,将超类改为andorid.app.Activity

  4. springBoot 自动配置原理--自己新建一个 starter

    上篇我们说到 springboot 和 SSM 框架的区别,今天我们就看看 springboot 到底为我们做了哪些事情,让我们开发变得如此简单. springboot 中起着重要作用的是 start ...

  5. Visual Studio 下C#编译器在解析属性名时如果增加一个get_[您的另一个已经包含在类中属性名]的属性会报错,微软大哥这是什么鬼?

    假设在在我们的vs环境新建一个类 copy以下代码,表面看好像一切都没有问题. using System; using System.Collections.Generic; using System ...

  6. 新建一个UI窗口-XproerUI(MFC)教程

    版权所有 2009-2015 荆门泽优软件有限公司 保留所有权利 产品首页:http://www.ncmem.com/apps/xproerui/index.asp 在线文档(XproerUI):Xp ...

  7. Android中使用自身携带的Junit新建一个测试工程

    1.新建立一个Android工程 package com.shellway.junit; public class Service { public int divide(int a,int b){ ...

  8. 新建一个Activity通过按钮打开它,再通过按钮关闭它

    首先需要创建一个供打开和关闭的Activity,先在scr下当前项目的包中创建一个新类Activity1, 并选择让其继承自Activity类,如下图所示: 之后配置AndroidMainifest. ...

  9. 新建一个mybatis HelloWorld

    1.下载mybatis https://github.com/mybatis/mybatis-3/ 没有梯子好像打不开 下载一个最新版本,我这里下载的是mybatis-3.4.1.zip 里面有myb ...

  10. Intellij IDEA 新建一个EJB工程(三)

    之前都是用IDEA启动JBoss服务器,并在启动的同时将EJB项目部署上去.在构建 artifacts 时遇到很多问题,明明是EJB项目却不能用EJB导出,真是奇怪~~ 后来用Web Applicat ...

随机推荐

  1. [FAQ] swagger-php @OA\JsonContent 与 @MediaType @OA\Schema 的用法

    @OA\JsonContent 是对 @MediaType @OA\Schema 两者的封装,类似于 laravel 中 JsonResponse 对 Response 的封装. @OA\JsonCo ...

  2. UOS 开启 VisualStudio 远程调试 .NET 应用之旅

    本文记录的是在 Windows 系统里面,使用 VisualStudio 2022 远程调试运行在 UOS 里面 dotnet 应用的配置方法 本文写于 2024.03.19 如果你阅读本文的时间距离 ...

  3. SemanticFunction 融合 LLM 和传统编程

    本文将继续和大家介绍 SemanticKernel 神奇的魔法,将使用 LLM 大语言模型编写的自然语言函数和传统的编程语言编写的函数融合到一起的例子.通过本文的例子,大家可以看到 SemanticK ...

  4. kubeadm搭建单master多node节点的k8s集群(3)

    一.实验环境准备 K8s集群角色 IP 主机名 安装的组件 配置 控制节点 192.168.1.10 master apiserver.controller-manager.scheduler.etc ...

  5. 二进制安装多master节点的k8s集群(2)

    1.环境准备 k8s集群角色 IP 主机名 安装的组件 控制节点 192.168.1.10 master apiserver.controller-manager.scheduler.etcd.doc ...

  6. C++多态与虚拟:Objects 实例化(Objects Instantiation)探究

    一.Objects的创建 依据已有的class CPoint ,我们可以产生一个或多个object(对象),或者说是产生一个instance(实体): CPoint aPoint(7.2); // a ...

  7. vue-单独引入css文件,设置公共的css样式或者修改默认的vant,mint样式

    1.css文件夹下新建global.css文件并粘贴复制: ======================= :root{     --bgColor : #d3252a;     --pinkColo ...

  8. WordPress CVE-2022-4230复现分析

    前言 开始CVE审计之旅 WP Statistics WordPress 插件13.2.9之前的版本不会转义参数,这可能允许经过身份验证的用户执行 SQL 注入攻击.默认情况下,具有管理选项功能 (a ...

  9. 四、【转】基于知识图谱的推荐系统(KGRS)综述

    以下文章来源于AI自然语言处理与知识图谱 ,作者Elesdspline 导语 本文是2020年针对知识图谱作为辅助信息用于推荐系统的一篇综述.知识图谱对于推荐系统不仅能够进行更精确的个性化推荐,而且对 ...

  10. nvm环境安装

    目录 nvm是什么 使用背景 nvm的坑. nvm,node,npm之间的区别. nvm.nodejs.npm的关系: nvm-windows下载地址 安装 linux . mac 源码包下载地址 解 ...