在Swift 5.2中为下标参数添加默认值

由donnywals于2020年2月19日发布
在Swift中定义自定义下标的功能非常强大,Swift下标的用法参考:《Swift语言入门实例教程》第5章第3节:Swift的结构(struct)类型及其下标(subscript), 下标使我们能够编写非常自然和简洁的代码。 考虑以下带有自定义下标的网格示例:

struct Grid {
  let items : [[GridItem]]

  subscript(x x: Int, y y: Int) -> GridItem? {
    guard !items.isEmpty, (items.startIndex...items.index(before: items.endIndex)).contains(x)
      else { return nil }

    let row = items[x]

    guard !row.isEmpty, (row.startIndex...row.index(before: row.endIndex)).contains(y)
      else { return nil }

    return row[y]
  }
}

请注意,默认情况下,下标不使用标签。 要使下标使用标签,您需要像在上面的代码中一样手动声明下标标签两次(x x:Int和y y:Int)。 像上面这样的下标将按如下方式使用:

let item = grid[x: 10, y: 2]

这个示例在Swift 5.1和Swift的早期版本中可以正常工作。 Swift 5.2中的新功能是能够为下标参数提供默认值:

struct Grid {
  let items : [[GridItem]]

  subscript(x x: Int = 0, y y: Int = 0) -> GridItem? {
    guard !items.isEmpty, (items.startIndex...items.index(before: items.endIndex)).contains(x)
      else { return nil }

    let row = items[x]

    guard !row.isEmpty, (row.startIndex...row.index(before: row.endIndex)).contains(y)
      else { return nil }

    return row[y]
  }
}

该代码与第一个示例几乎相同,除了下标现在具有默认参数。 这意味着您可以按如下方式使用下标:

let item = grid[y: 2]

这将自动为x参数调用默认值为0的下标。

老实说,以前不可能在Swift中定义默认下标参数这一事实令我感到惊讶,但我很高兴我们现在有这种可能性。 我认为这将使许多人为自己的对象编写更好的下标。

译自:https://www.donnywals.com/adding-default-values-to-subscripts-in-swift-5-2/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值