为什么字符串(_:基数:)初始值设定项有效

  • 本文关键字:有效 基数 字符串 swift
  • 更新时间 :
  • 英文 :


我在一个正在分析的项目中遇到了这个String扩展,无法理解3行上的String初始值设定项工作的原因。

fileprivate extension String {
init(integer n: Int, radix: Int, padding: Int) {
let s = String(n, radix: radix)
let pad = (padding - s.count % padding) % padding
self = Array(repeating: "0", count: pad).joined(separator: "") + s  
}
}

let s = String(n, radix: radix)

这是文档中的初始值设定项:

https://developer.apple.com/documentation/swift/string/2997127-init

但是该init的签名是init(_:radix:uppercase:)。然而,页面底部的示例使用了init(_:radix:)签名。这怎么可能?

Xcode中的"跳转到定义"表明该方法被声明为

public init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger

即CCD_ 7参数具有默认参数值:

您可以为函数中的任何参数定义默认值,方法是在该参数的类型之后为该参数赋值。如果定义了默认值,则可以在调用函数时省略该参数。

这里的默认值是false,因此

let s = String(n, radix: radix)

相当于调用

let s = String(n, radix: radix, uppercase: false)

最新更新