网站首页 > 技术文章 正文
Swift 允许一个函数返回多个值。或者如果你以一个不同的方式看到它,Swift 函数总是返回一个值,但是那个值可能是一个容易得到的数组。
C 和Objective-C用两种方式支持多值,都不太棒。函数/方法可以返回一个包含多个值的结构体或者类,或者他们可以使用外部参数。返回一个结构体是如此笨重,所以基本上从来不会被使用,除非结构体理论上是一个单独的单位,像frame返回一个NSRect 或者CGRect。外部的参数在Cocoa中用的很多,虽然,特别为了错误句柄而设计。
NSError 类和对应的NSError ** 模式在10.2时代被展现并且快速普及。一些语言抛出异常,Cocoa 把一个NSError * 通过参数传递给调用者来指出错误。像这样的代码是很常见的:
NSError *error;
NSData *data = [NSData dataWithContentsOfFile: file options: 0 error: &error];
if(data == nil) {
// handle error
}
这个将会变得麻烦,并且错误总是可变的,许多代码将会像这样替代:
NSData *data = [NSData dataWithContentsOfFile: file options: 0 error: ];
这有点糟糕,但是有吸引力。
多个返回值显示除了异常和外部指针外的另一个选项。在Python 中,例如,代码将会看起来这样:
data, error = NSData.dataWithContentsOfFile_options_error_(file, 0, None)
ifnot data:
# handle error
因为桥接,这变的有点奇怪,你将会必须要传递NONE作为外部参数,甚至它正被转换成第二个返回值。一个本地的Python调用可能看起来像这样:
data, error = Data.dataWithContentsOfFile(file, 0)
Swift 版本看起来几乎一样的:
let (data, error) = Data.dataWithContentsOfFile(file, 0)
这是一件小事,但是NSError返回在Cocoa 中是很常见的,使一切变得更友好。问题已经足够困扰我,我已经提交preprocessor crimes against humanity,尝试在 Objective-C中构建多返回值,并且我不需要做其他的任何事情。
猜你喜欢
- 2025-03-12 我实现了Java多返回值
- 2025-03-12 Python 函数中的 4 种参数类型
- 2025-03-12 「洞唐Coder」自学Python编程的第0021天:自定义函数(下)
- 2025-03-12 Python函数的10个级别,你达到了第几级?
- 2025-03-12 Python中的元组和列表的相同点和不同点是啥呢么?
- 2025-03-12 Python有序对象元组处理技术
- 2025-03-12 Python 中的函数和模块
- 2025-03-12 震惊!Python中定义函数竟然这样用,你知道吗?
- 2025-03-12 Python中的元组详解
- 2025-03-12 python编程解方程第二弹:10行代码解二次方程(纯字符)
- 03-13wxpython入门第五步(组件)
- 03-13WPF - 9.内容控件
- 03-13C# Text的基本用法
- 03-13单选按钮的设计思考
- 03-13屏幕颜色拾取器-C#学习进阶
- 03-13C# WinForms中RadioButton控件的用法
- 03-13C#中通过数据库动态生成RadioButton组
- 03-13小白之Tkinter库读文:基础组件-Radiobutton 单选按钮(10)
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)