我在一个正在分析的项目中遇到了这个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)