OC-NSNumber

前言

本篇文章介绍OC中的NSNumber

介绍

NSNumber是基本类型的对象表示
我们有时候无法直接使用基本类型,比如我们无法使用基本类型来填充NSArray数组。这个时候可以使用NSNumber

NSNumber的初始化

NSNumber的初始化一般有三种方法,下面介绍:

使用类方法numberWithXXX

+ (NSNumber *)numberWithChar:(char)value;
+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value;
+ (NSNumber *)numberWithShort:(short)value;
+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value;
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
+ (NSNumber *)numberWithLong:(long)value;
+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value;
+ (NSNumber *)numberWithLongLong:(long long)value;
+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value;
+ (NSNumber *)numberWithFloat:(float)value;
+ (NSNumber *)numberWithDouble:(double)value;
+ (NSNumber *)numberWithBool:(BOOL)value;
+ (NSNumber *)numberWithInteger:(NSInteger)value API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));

注意类型NSInteger是一个typedef类型,在64机器上是long类型,在32机器上是int类型。

注意:如果我们使用NSLog打印NSInteger的时候,可以把NSInteger转换为long,然后使用格式化字符"%li"打印。

使用实例方法initWithXXX格式

- (NSNumber *)initWithChar:(char)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedChar:(unsigned char)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithShort:(short)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedShort:(unsigned short)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithInt:(int)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedInt:(unsigned int)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithLong:(long)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedLong:(unsigned long)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithLongLong:(long long)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedLongLong:(unsigned long long)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithFloat:(float)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithDouble:(double)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithBool:(BOOL)value NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithInteger:(NSInteger)value API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)) NS_DESIGNATED_INITIALIZER;
- (NSNumber *)initWithUnsignedInteger:(NSUInteger)value API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)) NS_DESIGNATED_INITIALIZER;

使用@表达式

看下面的例子

NSNumber* intA = @-1;
NSNumber* longA = @1L;
NSNumber* charA = @'A';
NSNumber* floatA = @10.0f;

注意:我们使用@表达式的时候可以在@后面使用一个表达式,但是表达式一定得用括号括起来,看下面的例子:

int main(int argc, const char * argv[]) {@autoreleasepool {int a = 1;int b = 1;char c='o';NSNumber* intA = @(a+b);NSNumber* charA = @(c);NSLog(@"a + b = %@",intA);NSLog(@"c = %c",charA.charValue);}return 0;
}

获取NSNumber的值

我们一般用与初始化匹配的对应类型的方法获取NSNumber的基本类型的值

@property (readonly) char charValue;
@property (readonly) unsigned char unsignedCharValue;
@property (readonly) short shortValue;
@property (readonly) unsigned short unsignedShortValue;
@property (readonly) int intValue;
@property (readonly) unsigned int unsignedIntValue;
@property (readonly) long longValue;
@property (readonly) unsigned long unsignedLongValue;
@property (readonly) long long longLongValue;
@property (readonly) unsigned long long unsignedLongLongValue;
@property (readonly) float floatValue;
@property (readonly) double doubleValue;
@property (readonly) BOOL boolValue;
@property (readonly) NSInteger integerValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
@property (readonly) NSUInteger unsignedIntegerValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
@property (readonly, copy) NSString *stringValue;

NSNumber的使用

相等判断

- (BOOL)isEqualToNumber:(NSNumber *)number

比较操作

- (NSComparisonResult)compare:(NSNumber *)otherNumber;

对于

[A compare:@1]
  • 如果A<1,结果为NSOrderedAscending
  • 如果A=1,结果为NSOrderedSame
  • 如果A>1,结果为NSOrderedDescending

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

芯课堂 | SWM34S系列驱动TFT-LCD显示模组应用基本注意事项

1、确认硬件的连接、包括电源、地、RGB 数据线、DCLK\DE\HSYNC\VSYNC 等&#xff0c;显示模组有 DISP、RESET、CS、SCL、SDA 等。 2、确认各电压的正常&#xff0c;包括电源&#xff0c;部分有 IOVCC、VGL、VGH、VCOM 等电压 3、如果应用的 TFT-LCD 模组非演示例程中已适配调…

动态血糖监测市场调研:预计2029年将达到13亿美元

血糖监测即是对于血糖值的定期检查。实施血糖监测可以更好的掌控糖尿病患者的血糖变化&#xff0c;对生活规律&#xff0c;活动&#xff0c;运动&#xff0c;饮食以及合理用药都具有重要的指导意义&#xff0c;并可以帮助患者随时发现问题&#xff0c;及时到医院就医。 动态血糖…

LinkedList源码

LinkedList源码 总结 LinkedList数据结构采用链表&#xff0c;内部封装了Node类&#xff0c;set方法先让Node的pre指针指向之前的last节点&#xff0c;然后判断头节点知否为空&#xff0c;如果为空则让first指针指向该节点&#xff0c;不过不为空则让尾节点的next指针指向该节…

Linux:动静态库的概念制作和底层工作原理

文章目录 动静态库基础认知动静态库基本概念静态库的制作库的概念包的概念 静态库的使用第三方库小结 动态库的制作动态库的使用动态库如何找到内容&#xff1f;小结 动态库加载库和程序都要加载可执行程序的地址问题地址问题逻辑地址和平坦模式绝对编址和相对编址与位置无关码…

vue2(Vuex)、vue3(Pinia)、react(Redux)状态管理

vue2状态管理Vuex Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它使用集中式存储管理应用的所有组件的状态&#xff0c;以及规则保证状态只能按照规定的方式进行修改。 State&#xff08;状态&#xff09;:Vuex 使用单一状态树&#xff0c;即一个对象包含全部的应用层…

高防IP如何保护服务器

首先我们要知道什么是高防IP~ 高防IP是指高防机房所提供的ip段&#xff0c;主要是针对互联网服务器遭受大流量DDoS攻击时进行的保护服务。高防IP是目前最常用的一种防御DDoS攻击的手段&#xff0c;用户可以通过配置DDoS高防IP&#xff0c;将攻击流量引流到高防IP&#xff0c;防…

[pytorch入门] 3. torchvision中的transforms

torchvision中的transforms 是transforms.py工具箱&#xff0c;含有totensor、resize等工具 用于将特定格式的图片转换为想要的图片的结果&#xff0c;即用于图片变换 用法 在transforms中选择一个类创建对象&#xff0c;使用这个对象选择相应方法进行处理 能够选择的类 列…

docker 镜像打包,离线部署

基于镜像 1.导出tar。save命令(-o&#xff1a;指向导出文件&#xff0c;也可以用”>“大于号替代) docker save nginx > nginx.tar 或者 docker save 镜像ID > nginx.tar2. 导入镜像 docker load -i nginx.tar 或者docker load < nginx.tar基于容器 1 、 打…

网络安全全栈培训笔记(57-服务攻防-应用协议RsyncSSHRDPFTP漏洞批量扫描口令拆解)

第57天 服务攻防-应用协议&Rsync&SSH&RDP&FTP&漏洞批量扫描&口令拆解 知识点&#xff1a; 1、服务攻防-远程控制&文件传输等 2、远程控制-RDP&RDP&弱口令&漏洞 3、文件传输-FTP&Rsyc&弱口令&漏洞 章节内容&#xff1a; …

Python实现分段函数求导+绘制函数曲线

代码如下&#xff1a; import sympy as sp import numpy as np import matplotlib.pyplot as plt from sympy.utilities.lambdify import lambdify# 定义符号变量 x sp.symbols(x) # expr sp.Piecewise((0,0< x < 5), (1, x > 5)) # 定义分段原函数 #-------------…

远程ssh 不通的原因之一

背景&#xff1a;我都想大喊一声&#xff0c;我上网是通的&#xff0c; ping网址是通的&#xff0c;ping www.baidu.com 是通的&#xff0c; 怎么都远程不了&#xff0c;报超时&#xff1b;嘿&#xff0c; 别人远程就能行。我都想挠头了。 目录 1. 先 ping 自己&#xff0c;…

manacher算法 求最长回文串

本题链接&#xff1a;用户登录 题目&#xff1a; 样例&#xff1a; 输入 aa1ABA1b 输出 5 思路&#xff1a; 根据题目意思&#xff0c;求出最长回文串&#xff0c;我们可以用模板 manacher 算法 求最长回文串。 manacher算法 求最长回文串 核心有两个步骤。 一、将字符串转化…

SpringBoot分片上传、断点续传、大文件极速秒传功能

前言 文件上传是一个老生常谈的话题了&#xff0c;在文件相对比较小的情况下&#xff0c;可以直接把文件转化为字节流上传到服务器&#xff0c;但在文件比较大的情况下&#xff0c;用普通的方式进行上传&#xff0c;这可不是一个好的办法&#xff0c;毕竟很少有人会忍受&#…

华为机试真题实战应用【算法代码篇】-图谱新词挖掘1(附python、C++和JAVA代码实现)

目录 题目描述 代码实现 Java python C++ 代码2 题目描述 小华负责公司知识图谱产品,现在要通过新词挖掘完善知识图谱新词挖掘: 给出一个待挖掘问题内容字符串Content和一人词的字符串word,找到content中所有word的新词。新词: 使用词word的字符排列形成的字符串。 请帮…

Hive 数仓及数仓设计方案

数仓(Data Warehouse) 数据仓库存在的意义在于对企业的所有数据进行汇总&#xff0c;为企业各个部门提供一个统一、规范的出口。做数仓就是做方案&#xff0c;是用数据治理企业的方案。 数据仓库的特点 面向主题集成 公司中不同的部门都会去数据仓库中拿数据&#xff0c;把独…

框架概述和MyBatis环境搭建

学习视频&#xff1a;1001 框架概述_哔哩哔哩_bilibili 目录 框架概述 1.1为什么要学 1.2框架的优点 1.3 当前主流框架 Spring框架 Spring MVC框架 MyBatis框架 ​编辑 Spring Boot框架 Spring Cloud框架 1.4 传统JDBC的劣势 MyBatis 2.1 MyBatis概述 ORM框架工作原…

分布式日志

1 日志管理 1.1 日志管理方案 服务器数量较少时 直接登录到目标服务器捞日志查看 → 通过 rsyslog 或shell/python 等脚本实现日志搜集并集中保存到统一的日志服务器 服务器数量较多时 ELK 大型的日志系统&#xff0c;实现日志收集、日志存储、日志检索和分析 容器环境 …

编程语言MoonBit新增矩阵函数的语法糖

MoonBit更新 1. 新增矩阵函数的语法糖 新增矩阵函数的语法糖&#xff0c;用于方便地定义局部函数和具有模式匹配的匿名函数&#xff1a; fn init {fn boolean_or { // 带有模式匹配的局部函数true, _ > true_, true > true_, _ > false}fn apply(f, x) {f(x)}le…

【分布式技术】注册中心zookeeper

目录 一、ZooKeeper是什么 二、ZooKeeper的工作机制 三、ZooKeeper特点 四、ZooKeeper数据结构 五、ZooKeeper应用场景 ●统一命名服务 ●统一配置管理 ●统一集群管理 ●服务器动态上下线 ●软负载均衡 六、ZooKeeper的选举机制 七、实操部署ZooKeeper集群 步骤一…

compose部署tomcat

1.部署tomcat 1.1.下载相关镜像tomcat8.5.20 $ docker pull tomcat:8.5.20 1.2 在/data目录下创建tomcat/webapps目录 mkdir -p /data/tomcat/webapps 注意&#xff1a;这里是准备将宿主机的/data/tomcat/webapps映射到容器的 /usr/…