ios链式编程

2023-11-16

        首先我们看一下使用Masonry对控件进行布局的代码格式。

[self.bottomView1 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(20);
        make.width.mas_equalTo(30);
        make.bottom.mas_equalTo(-20);
        make.height.mas_equalTo(40);
    }];

        上边这段代码有特点

  1. 使用点语法
  2. 可以进行链式调用

那么实现链式编程就需要解决上边两个问题。

一、点语法

1、使用无参无返回值block

/*
* Function.h
*/
#import <Foundation/Foundation.h>

@class Function1;
typedef void(^mBlock)();
@interface Function1 : NSObject

- (mBlock)function;

@end

/*
* Function.m
*/
#import "Function1.h"

@implementation Function1

- (mBlock)function{
    return ^{
        NSLog(@"无参无返回值block!");
    };
}

@end

/*
* 调用
*/
- (void)viewDidLoad {
    [super viewDidLoad];
    Function1 *fun1 = [Function1 new];
    fun1.function();
}

使用这种方式就可以做到点语法调用方法。但是我们可以发现这种写法无法传入参数。接下来我们继续解决这个问题。

2、使用有参无返回值block

/*
* Function2.h
*/
#import <Foundation/Foundation.h>

@class Function2;
typedef void(^mBlock1)(NSString *str);

@interface Function2 : NSObject

- (mBlock1)function;

@end

/*
* Function.m
*/
#import "Function2.h"

@implementation Function2

- (mBlock1)function{
    return ^(NSString *str){
        NSLog(@"我想:%@", str);
    };
}

@end

/*
* 调用
*/
- (void)viewDidLoad {
    [super viewDidLoad];
    Function2 *fun2 = [Function2 new];
    fun2.function(@"吃饭");
}

通过给block加入参数,这样在使用点语法调用方法时返回一个block,通过给block加入参数即可达到目的。接下来就剩下最后一个问题:如何实现链式调用。

使用有参有返回值的block

/*
* Function.h
*/
#import <Foundation/Foundation.h>

@class Function3;
typedef Function3 *(^mBlock2)(NSString *str);
@interface Function3 : NSObject

- (mBlock2)function;

@end

/*
* Function.m
*/
#import "Function3.h"

@implementation Function3

- (mBlock2)function{
    return ^Function3 *(NSString *str){
        NSLog(@"我想:%@", str);
        return self;
    };
}

@end

/*
* 调用
*/
- (void)viewDidLoad {
    [super viewDidLoad];
    Function3 *fun3 = [Function3 new];
    fun3.function(@"吃饭").function(@"喝水").function(@"睡觉");
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ios链式编程 的相关文章

随机推荐

  • python发邮件--中文附件报错问题

    coding utf 8 Created on Thu Apr 11 14 01 30 2019 author zhang peng coding utf 8 import os import sys import smtplib from
  • 擎创技术流

    上期跟大家聊了下eBPF的发展历史还有特性 点击这里 擎创技术流 深入浅出运维可观测工具 一 聊聊eBPF的前世今生 一键回看上期精彩内容 这期主要跟大家分享下eBPF在应用过程中可能出现的问题 希望能帮到遇到类似问题的朋友 话不多说 我们
  • GIOU:Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression

    废话不多说 先看motivation There is a gap between optimizing the commonly used distance losses and maximizing this metric value
  • 高并发应用实践——缓存简介

    简介 随着互联网的普及 内容越来越复杂 用户和数据量越来越大 所以我们的应用应该支持更高的并发数 但是由于我们的服务器和数据库服务器资源量是有限的 所以如何更加高效的利用这有限的资源 并提供尽可能大的数据吞吐量 一个有效可行的办法就是引入缓
  • shell调用php脚本,并传递参数

    命令行执行带参数的php脚本 并取得参数 张映 发表于 2011 07 15 分类目录 php 一 为什么我们要在命令行下运行php脚本呢 个人理解 主要有二个原因 1 利用crontab去跑php 可以给服务器减压 当然在这里有一个条件
  • 如何导出mysql数据库

    mysql数据库是非常常用的一种数据库 属于中小型数据库 常用于网站业务和一些WEB系统业务 这个数据库非常简单 体积比较小 使用起来比较方便简洁 今天重点来介绍一下该数据的三种导出方法 1 使用工具软件导出数据库文件 这里推荐使用navi
  • ElementUI浅尝辄止30:PageHeader 页头

    如果页面的路径比较简单 推荐使用页头组件而非面包屑组件 1 如何使用
  • 信号处理之FFT(如何求幅度、相位、画频谱图)

    信号处理 可以理解为对信号进行某种加工或变换来达到削弱信号中的多余内容 滤除混杂的噪声和干扰 将信号变换成容易分析与识别的形式 便于估计和选择它的特征参量等目的 快速傅里叶变换 FFT 是信号处理的重要组成部分 是离散傅里叶变换 DFT 的
  • Python调用MMDetection实现AI抠图去背景

    这篇文章的内容是以 使用MMDetection进行目标检测 实例和全景分割 为基础 需要安装好 MMDetection 的运行环境 同时完成目标检测 实例分割和全景分割的功能实践 之后再看下面的内容 想要实现AI抠图去背景的需求 我们需要利
  • JavaWeb-13-Tomcat&Servlet学习笔记

    JavaWeb 13 Tomcat Servlet Web核心模块 1 web相关概念回顾 1 1软件架构 1 2资源分类 1 3网络通信三要素 2 web服务器软件 2 1常见的java相关的web服务器软件 2 2Tomcat web服
  • RDP远程桌面密码凭证获取

    前言 在渗透过程中获取到一台Windows服务器后 可以尝试获取当前机器保存的RDP远程桌面密码凭证 进而在内网横向渗透中进一步扩大战果 0x01 密码凭证获取 查看当前主机本地连接过的目标机器记录 reg query HKEY CURRE
  • 设置useSSL=true 的出现的问题

    一 环境 springboot mybaits plus mysql linux 服务器 服务器修改了SSL配置 对应的服务需要修改 二 问题1 Access without SSL denied Caused by java sql SQ
  • Base64图片编码的使用

    一 base64编码介绍 二 base64图片使用介绍 三 base64图片编码大小与原图文件大小之间的联系 四 代码实现 一 base64编码介绍 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一 Base64编码可用于
  • JUC学习系列六(计数器 CountDownLatch)

    一个同步辅助类 在完成一组正在其他线程中执行的操作之前 它允许一个或多个线程一直等待 用给定的计数 初始化 CountDownLatch 由于调用了 countDown 方法 所以在当前计数到达零之前 await 方法会一直受阻塞 之后 会
  • 以一己之力搭建分布式ChatGPT

    原以为去年年底ChatGPT已经火过一阵子了 慢慢热度会降下来 出乎意料的是 其热度有增无减 我也是从去年年底一直关注并使用 包括ChatGPT网页版 GPT3 API以及ChatGPT内测API 还包括其他国内外一些人工智能算法的体验 为
  • python回声程序_python 包详解

    包 包是一种管理 Python 模块命名空间的形式 采用 点模块名称 比如一个模块的名称是 A B 那么他表示一个包 A中的子模块 B 就好像使用模块的时候 你不用担心不同模块之间的全局变量相互影响一样 采用点模块名称这种形式也不用担心不同
  • pyspark修炼手册(长期帖)

    2020 03 31 在进行pyspark开发时 需要先安装hadoop spark的环境 或者只安装spark环境即可 配置集群or单机环境都可以 在配置好环境后 不需要单独启动hadoop spark 直接运行pyspark程序即可 一
  • 初学STM32之定时器中断

    初学STM32之定时器中断 一 定时器概述 1 定时器的分类 STM32F10x系列总共最多有8个定时器分为高级定时器 通用定时器和基本定时器 三种定时器的主要区别如下图所示 本文章仅介绍通用定时器的一些知识 2 通用定时器功能概述 通用定
  • c语言实验5循环结构程序,C语言学习知识循环结构程序设计实验报告.doc

    C语言学习知识循环结构程序设计实验报告 doc 甘肃政法学院本科生实验报告 五 姓名赵明翔学院公安技术学院专业安全防范工程班级 2015级安全防范工程班实验课程名称程序设计实验日期2016年月日开课时间2015学年第二学期实验题目实验5 循
  • ios链式编程

    首先我们看一下使用Masonry对控件进行布局的代码格式 self bottomView1 mas makeConstraints MASConstraintMaker make make left mas equalTo 20 make