IOS 开发 - block 使用详解

1.Blobk的定义

block的写法相对难记,不必司机应被,只需要在xcode里打出"inlineBlock"--回车, 系统会自动帮你把基础版写法给你匹配出来

    //Block的基础声明
    //等号"="之前是blobk的声明,等号“=”后面是block的实现
    /*
     returnType:返回类型(void、int、String *)
     blokName:block名称,随便写
     parameterTypes;参数类型(int ,NSString *) 或者  (int age,NSString * name) ;这里带不带参数名都行
     paremeters:参数 (int age,NSString * name) //这里必须带参数名 age、name
     statements:函数的声明,代码实现
     */
    returnType(^blockName)(parameterTypes) = ^(parameters) {
        statements
    };

Block的基本定义方式

1.1最基本的,没有返回值,不带参数

   /*
     格式:  void(^block名称)(void) = ^() {
          实现代码
      };
     */
  
    //1.创建blcok
    void(^someOneName1)(void) = ^ {
        
        NSLog(@"someOneName 这个block运行了===");
    };
    
    //2.执行block
    someOneName1();

1.2.带参数,没有返回值

  /*
     格式: void(^block名称)(参数类型) = ^(参数列表) {
          实现代码
      };
     */
    //2.1.创建blcok
    void(^someOneName2)(NSString * a , int b) = ^(NSString * name, int age) {
        NSLog(@"姓名==%@\n 年龄==%d",name,age);
    };
    
    //2.2.执行block
    someOneName2(@"张三",19);

3.带参数,带返回类型

  /*
     格式: 返回类型(^block名称)(参数类型) = ^(参数列表) {
          实现代码
      };
     */

    //3.1. 创建返回类型是NSString的block
    NSString *(^someOneName3)(NSString *,int ) = ^(NSString * name ,int age) {
        
        return name;
    };
    
    //3.2.执行block
    NSString * nameString = someOneName3(@"zhangsan",19);
    NSLog(@"nameString==%@",nameString);
    
    
    //3.3. 创建返回类型是int的block
    int (^someOneName4)(NSString * ,int) = ^(NSString * name,int age) {
        
        return age;
    };
    
    //3.4.执行block
    int ageNum = someOneName4(@"zhangshan",19);
    NSLog(@"ageNum===%d",ageNum);
    

2.Block的使用

很多时候,我们需要将我们声明的block作为函数的参数,有两种使用方式:

2.1.第一种,直接将Block的创建放在函数中:

/*
 例如:将someOneName1这个Block作为函数funcName1的参数;
 void(^someOneName1)(void) = ^ {
     NSLog(@"someOneName 这个block运行了===");
 };
 
 我们先来看普通带参函数的写法:
 - (void)funcName:(NSString *)name
 如果block作为参数,只需要把“:(NSString *)name”这一部分替换成blcok即可
 写法为:
 - (void)funcName1:(void(^)(void))name
 //可以看到:括号()里的NSString * 换成了 void(^)(void)
 那么这个void(^)(void) 是由 void(^someOneName1)(void) 演化来的(删除了blcock名称someOneName1)
 */

以下是写法:

// 无参数无返回值的Block参数
- (void)funcName1:(void(^)(void))block
{
    
}

//带参数 无返回值的block参数
- (void)funName2:(void(^)(NSString * a , int b))block
{
    
}

//带参数有返回值的block参数
- (void)funName3:(NSString *(^)(NSString *,int ))block
{
    
}

2.2第二种方式是通过typedef定义一种新的类型,这也是大多数情况下采用的方式:

我现在.h文件里定义了一个someOneBlock 

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

typedef void(^someOneBlock)(int age,NSString * name);

@interface blockViewController : UIViewController

@end

然后在.m文件里实现

- (void)funcName:(someOneBlock)block
{
    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/592977.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件无线电系列——数字调制信号的解调算法

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、数字调制信号的解调…

Shell编程debug

debug调试 debug方法 sh -x显示脚本执行过程set命令设置开始debug和结束debug的位置显示脚本某一部分执行过程&#xff0c;解决复杂脚本故障 示例&#xff1a; sh -x 显示脚本执行过程 set显示脚本的部分执行过程 set -x 开始调试&#xff0c;从这里开始显示脚本的详细执行过…

WebAssembly 入门教程 c++、python编译wasm

WebAssembly 入门 了解 wasm 使用场景&#xff0c;复杂对象传递和经验法则。 简介 WebAssembly 是一种新的编码方式&#xff0c;可以在现代的网络浏览器中运行。它是一种低级的类汇编语言&#xff0c;具有紧凑的二进制格式&#xff0c;可以接近原生的性能运行&#xff0c;并…

Docker入门篇来啦~

文章目录 1虚拟化技术1.1 硬件级虚拟化1.2 操作系统级虚拟化 2 Docker是什么2.1 Docker介绍2.2 容器和虚拟机的区别2.3 为什么使用Docker 3 Docker运行环境部署3.1 Docker安装3.2 Docker服务启动 4 Docker核心组件4.1 镜像4.1.1 镜像的基本概念4.1.2 镜像的组成结构4.1.3 镜像的…

上位机图像处理和嵌入式模块部署(树莓派4b使用lua)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 lua是一个脚本语言&#xff0c;比c语言开发容易&#xff0c;也没有python那么重&#xff0c;整体使用还是非常方便的。一般当成胶水语言进行开发&a…

Linux基础指令001

名称日期版本说明作者了解并熟练运用Linux基础指令2024/05/04v0.0.1汇总篇lgb 一&#xff0c;了解Linux,并安装 Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协…

编译 x264 for iOS

文章目录 编译在 FFMpeg 启用 x264其他编译选项报错处理 环境 &#xff1a; macOS 14.3.1 x264 - 20191217-2245 编译 1、下载 x264 源码 http://download.videolan.org/pub/videolan/x264/snapshots/ 这里我下载x264-snapshot-20191217-2245.tar.bz2 &#xff08;截止2024-…

【计算机网络】计算机网络的定义和分类

一.定义 计算机网络并没有一个精确和统一的定义&#xff0c;在计算机网络发展的不同阶段&#xff0c;人们对计算机网络给出了不同的定义&#xff0c;这些定义反映了当时计算机网络技术的发展水平。 例如计算机网络早期的一个最简单定义&#xff1a;计算机网络是一些互连的、自…

10个使用NumPy就可以进行的图像处理步骤

图像处理是一种数学计算。数字图像由称为像素的彩色小点组成。每个像素由红、绿、蓝(RGB)三个独立的颜色组成。每个像素中的主色由每个RGB分量的数值决定。 本文将介绍10个使用使用NumPy就可以进行的图像处理步骤&#xff0c;虽然有更强大的图像处理库&#xff0c;但是这些简单…

dp 动态规划 力扣

64. 最小路径和 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1,3,1],[1,5,1],[4,2,1]] 输…

IDA使用教程-IDA7.5版本

IDA使用教程 右键使用32bit分析程序 一&#xff0c;IDA修改&#xff0c;保存 修改&#xff1a;IDA->edit->Patch program&#xff08;补丁程序&#xff09;->Assemble&#xff08;汇编&#xff09;修改。 保存&#xff1a; IDA->edit->Patch program->Appl…

【数据结构】--- 深入剖析二叉树(上篇)--- 初识树和二叉树

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 数据结构之旅 &#x1f3e0; 初识树 &#x1f4d2; 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点…

Leetcode354. 俄罗斯套娃信封问题

Every day a Leetcode 题目来源&#xff1a;354. 俄罗斯套娃信封问题 解法1&#xff1a;动态规划 我们必须要保证对于每一种 w 值&#xff0c;我们最多只能选择 1 个信封。 首先我们将所有的信封按照 w 值第一关键字升序、h 值第二关键字降序进行排序&#xff1b; 随后我们…

QT+串口调试助手+扩展版

前言&#xff1a;此文章是这篇文章的拓展 QT串口调试助手基本版-CSDN博客&#xff0c;如果需要独立完成串口调试助手直接看基本版文章即可&#xff0c;如果需要完成串口调试助手的其他功能&#xff0c;参考拓展版。 一、更新QT串口调试助手UI界面 1、ui串口设置界面 2、ui串口…

Java与Go: 生产者消费者模型

什么是生产者消费者模型 生产者-消费者模型&#xff08;也称为生产者-消费者问题&#xff09;是一种常见的并发编程模型&#xff0c;用于处理多线程或多进程之间的协同工作。该模型涉及两个主要角色&#xff1a;生产者和消费者&#xff0c;一个次要角色&#xff1a;缓冲区。 生…

Unity---版本控制软件

13.3 版本控制——Git-1_哔哩哔哩_bilibili Git用的比较多 Git 常用Linux命令 pwd&#xff1a;显示当前所在路径 ls&#xff1a;显示当前路径下的所有文件 tab键自动补全 cd&#xff1a;切换路径 mkdir&#xff1a;在当前路径下创建一个文件夹 clear&#xff1a;清屏 vim…

EtherCAT通信总线状态监视

1、EtherCAT总线运动控制学习笔记 EtherCAT总线运动控制学习笔记(RXXW_Dor)_汇川pdo控制命令607a-CSDN博客文章浏览阅读3.3k次,点赞3次,收藏9次。说到总线控制,就要说到报文、对象字典、PN通信我们大部分会说报文,EtherCAT通信我们常说对象字典,叫法不一样,但是原理基…

OneFlow深度学习框原理、用法、案例和注意事项

本文将基于OneFlow深度学习框架&#xff0c;详细介绍其原理、用法、案例和注意事项。OneFlow是由中科院计算所自动化研究所推出的深度学习框架&#xff0c;专注于高效、易用和扩展性强。它提供了一种类似于深度学习库的接口&#xff0c;可以用于构建神经网络模型&#xff0c;并…

数据结构---单链表

题目&#xff1a;构造一个单链表。 使用的软件&#xff1a;VS2022使用的语言&#xff1a;C语言使用的项目&#xff1a;test.c Setlist.h Setlish.c 项目实践&#xff1a; Setlist.h的代码为&#xff1a; #pragma once#include<stdio.h> #include<stdlib.h> #incl…

SQL注入基础-3

一、宽字节注入 1、宽字节&#xff1a;字符大小为两个及以上的字节&#xff0c;如GBK&#xff0c;GB2312编码 2、数据库使用GBK编码时&#xff0c;会将两个字符合并为一个汉字(宽字节)。特殊值字符如单引号都会被转义【--->\】&#xff0c;如sqli-lads第32关&#xff0c;输…