iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)
1、nonnull:字面意思就能知道:不能为空(用来修饰属性,或者方法的参数,方法的返回值)
代码:
//三种使用方式都可以
@property (nonatomic, copy, nonnull) NSString *name; @property (nonatomic, copy) NSString * _Nonnull name; @property (nonatomic, copy) NSString * __nonnull name; //补充(不适用于assign属性,因为它是专门用来修饰指针的)
@property (nonatomic, assign) NSUInteger age; //补充(用下面宏包裹起来的属性全部都具nonnull特征,当然,如果其中某个属性你不希望有这个特征,也可以自己定义,比如加个nullable)
//在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之间,定义的所有对象属性和方法默认都是nonnull
//也可以在定义方法的时候使用
//返回值和参数都不能为空
- (nonnull NSString *)test:(nonnull NSString *)name;
//同上
- (NSString * _Nonnull)test1:(NSString * _Nonnull)name;
这样,你在使用以上方法的时候会出现这种效果提示
同样,使用属性的时候:
2、nullable:表示可以为空(使用方法和上面几乎一样,但是没有发现和上面类似的宏)
代码(大概看一下,参考上面就行了):
//三种使用方式
// 方式一:
@property (nonatomic, copy, nullable) NSString *name;
// 方式二:
@property (nonatomic, copy) NSString *_Nullable name;
// 方式三:
@property (nonatomic, copy) NSString *__nullable name;
效果:
这样,当在使用这个属性的时候,Xcode的代码提示会告诉你这个属性是可以为空的,算是一种编程规范吧,减少程序员之间的交流。
3、null_resettable: get:不能返回空, set可以为空(注意:如果使用null_resettable,必须 重写get方法或者set方法,处理传递的值为空的情况)
// 书写方式:
@property (nonatomic, copy, null_resettable) NSString *name;
设置一下set或get方法
- (void)setName:(NSString *)name
{
if (name == nil) {
name = @"我叫畅敏";
}
_name = name;
}
- (NSString *)name
{
if (_name == nil) {
_name = @"我叫畅敏";
}
return _name;
}
4、_Null_unspecified:不确定是否为空
使用方式只有这两种:
@property (nonatomic, strong) NSString *_Null_unspecified name;
@property (nonatomic, strong) NSString *__null_unspecified name;
总结:我理解这些东西主要就是为了提高开发规范,提示使用的人应该传什么样的值,如果违反了对规范值的要求,就会有警告;
iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)的更多相关文章
- 关键字nullable,nonnull,null_resettable,_Null_unspecified详解
相信在开发过程中,很多小伙伴们儿都会见到nullable,nonnull,null_resettable,_Null_unspecified这几个关键字,但是并不知道它们是什么意思,下面我就给大家一一 ...
- ios9和ios10的新特性
昨天面试了一个做ios开发的公司,其中面试官问我最新的ios系统版本是多少,以及它的特性是什么?由于自己是初学者,所以对这些没有关注过.今天特地搜索了一下关于ios9和ios10的新特性,并整理了一下 ...
- 利用ABAP 740的新关键字REDUCE完成一个实际工作任务
ABAP 740从2013年发布至今已经过去很长的时间了,下面这张图来自SAP社区博客: ABAP News for Release 7.40 – What is ABAP 7.40? 图中的ABAP ...
- ios9 新关键字 __kindof 等(etc) 小结
首先__kindof:规定参数为UITableViewCell(举例)这个类或者其子类.比如说一个NSArray<UIView *>*,如果不加__kindof,这个数组只能有UIView ...
- UWP win10 app 新关键字x:Bing
原本使用MVVM开发,我们使用数据绑定是x:Binging 新的关键字x:Bing使用和原来x:Binging区别不大. <TextBox x:Name="textBox" ...
- C++11——引入的新关键字
1.auto auto是旧关键字,在C++11之前,auto用来声明自动变量,表明变量存储在栈,很少使用.在C++11中被赋予了新的含义和作用,用于类型推断. auto关键字主要有两种用途:一是在变量 ...
- iOS9编程GOGOGO:XCode7新变化
做一个关于栈视图 UIStackView的Demo,先看看XCode7的变化 关于StoryBoard: 启动画面由xib变为Storyboard StoryBoard引用: 如今能够在一个Story ...
- JDK8接口新关键字default和static
JDK8及以后,允许我们在接口中定义static方法和default方法. public interface InterfaceDemo { // static修饰符定义静态方法 static voi ...
- iOS9新特性之新添加的关键字
iOS9 新出的关键字:用来修饰属性,或者方法的参数,返回值 好处:1.迎合swift 2.提高我们开发人员开发规范,减少程序员之间的交流 注意:iOS9新出的的关键字nonnull,nullable ...
随机推荐
- MBR结构和DBR结构
- 剑指Offer面试题:9.二进制中1的个数
一.题目:二进制中1的个数 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. 二.可能引起死循环的解法 一个 ...
- 企业IT管理员IE11升级指南【4】—— IE企业模式介绍
企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...
- 【原】通过JS打开IE新tab(非Window)的解决方案
近日项目里遇到限定在IE的tab窗口里打开新窗口的需求,结合网上的资源和亲自实践,总结以下比较可行的解决方案. 1.首先必须保证IE的设置正确.打开IE的Internet options ->G ...
- HTML5 音频播放器-Javascript代码(短小精悍)
直接上干货咯! //HTML5 音频播放器 lzpong 2015/01/19 var wavPlayer = function () { if(window.parent.wavPlayer) re ...
- Rabbitmq安装与配置
install: 1.安装Erlang: $yum -y install erlang 2.安装rabbitmq-server: $rpm --import https://www.rabbitmq. ...
- Java Thread 的使用
Java Thread 的使用 Java Thread 的 run() 与 start() 的区别 Java Thread 的 sleep() 和 wait() 的区别 一.线程的状态 在正式学习 ...
- [VB] if 判断语句 和 If、IIf函数的比较
Module Module1 Sub Main() Dim s1 As String = "我是真的" Dim s2 As String = "我不是真的" D ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- 创建第一个 local network(I) - 每天5分钟玩转 OpenStack(80)
在 ML2 配置文件中 enable local network 后,本节将开始创建第一个 local network. 我们将通过 Web GUI 创建第一个 local network. 首先确保 ...