为什么不在Swift中使用选项?

 叶小丹丶丶01_520 发布于 2023-01-07 12:34

我正在阅读如何在Swift中编程,并且可选项的概念让我有点烦恼.对于为什么使用选项而言并不是真的,这是有道理的,但更多的是在什么情况下你不想使用选项.根据我的理解,一个可选项只允许将一个对象设置为nil,那你为什么不想要这个功能呢?是不是将对象设置为n告诉ARC释放对象的方式为零?并且基金会和Cocoa中的大部分功能都没有返回选项吗?因此,除了每次引用一个对象时都要输入一个额外的字符,有没有什么好的理由不使用可选代替常规类型?

1 个回答
  • 有很多理由不使用可选项.主要原因:你想表达一个值必须可用.例如,当您打开文件时,您希望文件名是字符串,而不是可选字符串.使用nil文件名根本没有意义.

    我将考虑两个主要用例:函数参数和函数返回值.

    对于函数参数,以下成立:如果需要提供参数,则不应使用选项.如果输入任何内容都没有问题并且输入有效(记录!),那么请输入一个可选项.

    对于返回没有可选项的函数返回值特别好:您向调用者保证他将接收一个对象,而不是一个对象或什么都没有.当您不返回可选项时,调用者知道他可以立即使用该值而不是先检查null.

    例如,考虑工厂方法.这样的方法应该总是返回一个对象,那么为什么要在这里使用可选项呢?有很多这样的例子.

    实际上,大多数API应该使用非选项而不是选项.大多数时候,只是传递/接收可能什么都不是只是不是你想要的.很少有案例没有选择.

    必须彻底记录每个使用可选项的情况:在哪种情况下方法什么都不返回?什么时候可以不用任何方法,后果是什么?很多文档开销.

    然后还有简洁性:如果您使用的是遍布整个地方的可选API,那么您的代码将会被空检查所混乱.当然,如果每次使用可选项都是有意的,那么这些检查就很好并且是必要的.但是,如果API仅使用可选项,因为它的作者是懒惰的并且只是在整个地方使用可选项,那么检查是不必要的和纯粹的样板.

    但要小心!

    我的回答可能听起来好像选项的概念很糟糕.反之亦然!通过像选项一样的概念,程序员能够声明是否可以输入/返回任何内容.函数的调用者始终知道这一点,并且编译器强制执行安全性.将它与普通的旧C进行比较:您无法声明指针是否可以null.您可以添加说明是否可能的文档注释null,但编译器不强制执行此类注释.如果调用者忘记检查null的返回值,则会收到段错误.使用选项,您可以确定没有人再取消引用null指针.

    总而言之,零安全类型系统是现代编程语言的主要进步之一.

    2023-01-07 12:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有