一尘不染

在Swift中,Int是否具有采用String的隐藏初始化器?

swift

我尝试查看用于Int的Swift API,但仍然不确定为什么可以使用:

var foo = Int("100")

我在文档中看到以下初始化程序:

init()
init(_: Builtin.Word)
init(_: Double)
init(_: Float)
init(_: Int)
init(_: Int16)
init(_: Int32)
init(_: Int64)
init(_: Int8)
init(_: UInt)
init(_: UInt16)
init(_: UInt32)
init(_: UInt64)
init(_: UInt8)
init(_:radix:)
init(_builtinIntegerLiteral:)
init(bigEndian:)
init(bitPattern:)
init(integerLiteral:)
init(littleEndian:)
init(truncatingBitPattern: Int64)
init(truncatingBitPattern: UInt64)

但我看不到init(_: String)上面。引擎盖下是否有一些自动魔术?


阅读 217

收藏
2020-07-07

共1个答案

一尘不染

有一个

extension Int {
    /// Construct from an ASCII representation in the given `radix`.
    ///
    /// If `text` does not match the regular expression
    /// "[+-][0-9a-zA-Z]+", or the value it denotes in the given `radix`
    /// is not representable, the result is `nil`.
    public init?(_ text: String, radix: Int = default)
}

扩展方法,该方法采用字符串和可选的基数(默认为10):

var foo = Int("100") // Optional(100)
var bar = Int("100", radix: 2) // Optional(4)
var baz = Int("44", radix: 3) // nil

_怎么会找到那个?_对没有外部参数名称的方法使用[“跳转到定义”中的“技巧” ,编写等效代码

var foo = Int.init("100")
//            ^^^^

然后- 在Xcode中cmd单击init:)

2020-07-07