Ruby ||= Objective-C 中的等效项

2024-04-11

我最近一直在学习 ruby​​,并且基本上喜欢 ||= 功能,因为它会让在 Objective C 中编写惰性 getter 变得更加容易。

目前我编写吸气剂,例如:

- (NSArray *)myArray {
  if (!_myArray) {
    _myArray = [NSArray array];
  }
  return _myArray
}

除非我缺少 ||= 的某些内容,否则我可以使用 Ruby 编写前面的代码:

- (NSArray *)myArray {
  return _myArray ||= [NSArray array];
}

这显然干净得多。 Objective-C 语言/运行时中是否有任何东西可以让您做到这一点?

另外,以下是吸气剂的单行三元,我不确定它是否与上面发布的经过尝试的真实方法(第一个片段)一样有效。有人可以告诉我这样做是否有什么问题:

- (NSArray *)myArray {
  return _myArray = _myArray ? _myArray : [NSArray array];
}

最后一个片段与您发布的第一个片段具有相同的效果。

作为一种改进,虽然没有像这样的运算符||=在 Objective-C 中,您可以省略三元 if 运算符的第二个参数并执行

return _myArray = _myArray ?: [NSArray array];

这完全相当于

return _myArray = _myArray ? _myArray : [NSArray array];

这是现代版本都支持的语言扩展gcc http://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Conditionals.html#Conditionals and clang http://clang.llvm.org/doxygen/classclang_1_1BinaryConditionalOperator.html.

奖励:如果你想节省更多的击键次数,你可以这样做

- (NSArray *)myArray {
    return _myArray = _myArray ?: @[];
}

附带说明一下,跳过中间操作数也有一些好处。

例如在本例中

id x = [self someMethod] ? [self someMethod] : [self anotherMethod];

if someMethod评估为true它将被调用两次,而做

id x = [self someMethod] ?: [self anotherMethod];

它只会被调用一次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby ||= Objective-C 中的等效项 的相关文章

  • 改变 UIImage 颜色

    我正在尝试更改 UIImage 的颜色 我的代码 UIImage coloredImage UIImage firstImage withColor UIColor color UIGraphicsBeginImageContext fir
  • 如何检查rails上传的文件类型?

    我如何查看即将到来的文件类型 例如 csv 或 xls 请给个代码 我得到文件是这样的 aut name uploaded io original filename File open Rails root join public uplo
  • Ruby 在带有偏移量的数组中查找

    我正在寻找一种以更简洁的方式在 Ruby 中执行以下操作的方法 class Array def find index with offset offset block offset 1 find block end end offset a
  • 使用 UIImagePickerController 选择图像后,照片库视图保留在屏幕上

    当我通过 UIImagePickerController 界面从照片库中选择一张图片后 照片库视图保持显示 即使我调用了解雇模型视图控制器动画 in imagePickerController didFinishPickingImage e
  • 在 Rails 4 中渲染部分/rake 任务/后台作业/模型中的视图

    我读过很多关于在 rake 任务 后台作业 模型中渲染 Rails 部分和视图的内容 我在 Stackoverflow 和网络上找到的绝大多数内容都描述了在 Rails 3 中工作的方法 但它们似乎已经过时了 而且我没有让它们工作 即使花了
  • iOS - 单元测试异步代码

    我试图测试的方法部分如下 void configureTableFooterView dispatch async dispatch get main queue self tableView tableFooterView nil if
  • UIImage initWithContentsOfFile 不起作用

    我有问题 我想避免 UIImage imageNamed 所以我做了 UIImage prodImg UIImage alloc initWithContentsOfFile myimage png controller productIm
  • 如何检查水豚中的复选框?

    我正在使用 Rspec 和水豚 我怎样才能写一个步骤来检查checkbox 我试过了check按价值但它找不到我的checkbox 我不知道该怎么做 因为我实际上有相同的 ID 但值不同 这是代码
  • 正确地从 NSString 创建图像

    我正在从字符串变量创建图像 以下是创建图像的代码片段 UIImage imageFromText NSString text FontName UIFont font set the font type and size UIFont fo
  • 如何使用 Ruby 2.7.0 修复 Rails 的警告消息

    有没有人解决这个问题Ruby 2 7 0 I used rbenv并安装了 Ruby v2 7 0 然后使用创建了一个 Rails 项目Rails v6 0 2 1 目前 通过运行之一 rails s rails s u puma rail
  • (在 Ruby 中)允许混合类方法访问类常量

    我有一个为其定义常量的类 然后我定义了一个类方法来访问该类常量 这很好用 一个例子 usr bin env ruby class NonInstantiableClass Const hello world class lt lt self
  • iOS App Today 扩展未上传到物理设备

    我正在为我的应用程序创建一个今日小部件http budgt ch http budgt ch因为一些用户要求快速访问关键功能 初步 扩展在 iOS 模拟器上运行良好 安装如下 1 安装最新的容器应用程序 2 安装以 今天 为容器的扩展 但是
  • for 循环内存不足

    嘿 所以我认为如果我制作一个生成随机密码的小应用程序 然后让该应用程序运行所有可能性并尝试查看密码是什么 告诉我它尝试了多少次 那会很酷 有时应用程序可以工作 有时会崩溃 具体取决于密码是什么 我想知道是否可以采取任何措施来防止它因占用大量
  • iOS:调用 Objective-C 方法的处理开销是多少?

    我正在编写一些实时音频处理代码 该代码将在音频单元的渲染回调中执行 该线程处于系统识别的最高优先级 Apple 指示最大限度地减少此调用中进行的处理量 他们的建议之一是避免 Objective C 方法调用 But why 调用 Objec
  • Capybara 的 has_selector 有哪些选项?

    我在 RSpec 中遇到此错误 有没有任何文档have selector解释了选项哈希中的每个键以及它到底有什么作用 invalid keys content should be one of text visible between co
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • UISegmentedControl 中的自定义字体禁用调整FontSizeToFitWidth

    我已经为我的 UISegmentedControl 设置了自定义字体 但它似乎禁用了默认字体自动调整字体大小以适合宽度范围 Before After 这是我用来设置自定义字体的代码 UISegmentedControl segmentedC
  • 释放 Core Foundation 对象引用

    我是否需要释放 Core Foundation 对象来清理内存 如果是这样 怎么办 例如 在代码中 ABAddressBookRef addressBook ABAddressBookCreate CFArrayRef peopleArra
  • NSDictionary 上的 NSPredicate

    我试图根据字母表在表格视图中创建部分 并在这些部分下按字母顺序对我的条目进行排序 我已经收集了 bandArrayIndex 中 bandArray 每个条目的第一个字母 现在我尝试使用 NSPredicate 来计算每个字母有多少个 我正
  • 将第 3 方库 ZXing 导入 Xcode

    我尝试了多种方法将第 3 方库 ZXing 导入我的 iOS 应用程序 但所有方法都很痛苦 或者根本不起作用 如果有人可以建议我做错了什么 或者提出导入 ZXing 等库的更好方法 我将非常感激 一定比这个容易 这就是我所做的 结果是 My

随机推荐