我练形体的时候玩得很开心.
我想实现我的解决方案as中的functionsInt中的extension中的一个,因为我喜欢拥有漂亮语法的 idea .该函数本身如下所示:

func decomposed(_ n: Int) -> [Int] {
    if n > 10 {
      return n.decomposed(n / 10) + [n % 10] 
    } else {
      return [n]
    }
  }

现在,我试着把它当作extension来实现.由于我想要像420.decomposed()一样使用它,所以我想我需要instance作为default argument.我接着说:

extension Int {
  func decomposed(_ n: Int = self) -> [Int] {
    if n > 10 {
      return n.decomposed(n / 10) + [n % 10] 
    } else {
      return [n]
    }
  }
}

然而,这是它变得更加棘手的部分.编译器告诉我error: cannot find 'self' in scope.

在阅读了方法in the docs之后,我求助于使用Int?默认参数.现在,该扩展实现为:

extension Int {
  func decomposed(_ n: Int? = nil) -> [Int] {
    var _n = n ?? self
    if _n > 10 {
      return _n.decomposed(_n / 10) + [_n % 10] 
    } else {
      return [_n]
    }
  }
}

I don't like the look of the _n, though.
I would love to use self as the default argument. Is that possible? Or are we stuck with hackity hacks until the judgement day?

推荐答案

您需要删除n作为参数,将函数中每次使用n替换为self(因为这就是要操作的对象),并在递归中将函数语法转换为方法语法:

extension Int {
    func decomposed() -> [Int] {
        if self > 10 {
            return (self / 10).decomposed() + [self % 10]
        } else {
            return [self]
        }
    }
}

Swift相关问答推荐

UITableView未显示类数组数据

如何在SWIFT中轻松格式化公制和英制使用的UnitVolume

如何在AudioKit中实现自定义音效 node ?

在SWIFT中使用Objective-C struct 时出错(在作用域中找不到类型)

NSApplication是否需要NSApplicationDelegate?

异步/等待函数的XCTAssertThrowsError

解码器是否需要具有密钥的外部数据表示?

如何在 Swift 中做类型安全的索引?

Swift:结果的失败类型不能是协议 - Type 'any ShadowError' cannot conform to Error

类型擦除`AsyncMapSequence, Element>`

从 Swift Vapor Server 中调用 ShazamKit

按钮图像不会立即刷新

如何在 ZStack 中单独下移卡片?

Swift Components.Url 返回错误的 URL

Swift 3:日期与 NSDate?

为什么'nil' 与 Swift 3 中的 'UnsafePointer' 不兼容?

Swift 3:小数到 Int

playground 导入:没有这样的模块Foo

TabView 在切换选项卡时重置导航堆栈

应用程序包不包含有效标识符