OC 30 day
我在swift读书会上发起了这个疑问,得到非常多人的解惑,因此发起这篇文章。
func method(a:String?)
这段程序码的意思就是说,a 这个参数是可以为nil的,他可以存在也可以不存在。
这段语法究竟是能在Objective-C上实现的吗?
可以的,如以下的程序码就是
- (void)method:(nullable NSString *)a;
我们在宣告type的地方加上标记,nullable nonull都是标记是否能nil。如字面上的意思做以下解释。
可以是null的
不可以null
值得注意的是,Objective-C 的语法语swift 是不同的。
因为 Objective-C null 检查是不严谨的,在语言特性有很大的弹性同时,需要做的处理自然就会变多,这就是动态语言的特性了。
那麽,如果method 没有nil有处理,如果又给了nil 是不是就carsh了?
没错的...
Objective-C 在swift 出来之前,method 的参数是否能 nil 都是要去查文件才能知道,nullable 与 nonull 在method描述上就能知道是否能给nil了。
另外语法特性的差异还有下面这点:
宣告时:
func method(a:String,b:String?){
}
呼叫时
method(a:str)
我们可以看到,因为参数b 我们不给他值,那麽我们可以直接忽略他,在Objective-C上有类似的语法吗?
宣告时
- (void)method:(NSString *)a :(nullable NSString *)b{
}
呼叫时
[self method:str :nil];
以上的语法证实,没办法省略。尽管你没有要给a 这个参数,你势必还是要给 nil。
难道,就真的没办法省略吗?还是可以的
宣告时
- (void)method:(NSString *)a :(NSString *)b{
}
- (void)method:(NSString *)a{
}
呼叫时
[self method:str];
用以上语法,可以实践出省略的效果,但是我们要注意的是,他的本质意义上是与不给值而省略不同。在 method 的参数上无论做了nullable描述,都必须要自行 nil 处理。
>>: Windows Server 安装 MySQL Community 免费社群版
前言 今天要在 RecipeDetailView 中添加 Picker controller, 使其...
因为这次我接的API是openweather,所以我们开始前要先到他们的官网去申请帐号哦! 注册完後...
缘由: APP开发使用Webview也是很常见的,有些功能常用但难度不高,有些功能则需要与网页端配合...
tags: 铁人赛 Docker Container Microservice DevOps 概述 ...
tags: 2021永丰金铁人赛 当程序要在很短的时间内发送好几笔委托单,就会牵涉到blocking...