В Swift, есть ли у Int скрытый инициализатор, который принимает строку?

swift

1438 просмотра

1 ответ

35 Репутация автора

Я попытался взглянуть на Swift API для Int, и я все еще не уверен, почему это работает:

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)выше. Есть ли что-то автоматическое, что происходит под капотом?

Автор: Skalley Wagg Источник Размещён: 17.10.2015 10:27

Ответы (1)


7 плюса

433251 Репутация автора

Решение

Существует

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)
}

метод extension, принимающий строку и необязательный radix (по умолчанию 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")
//            ^^^^

а затем - cmdнажмите initв Xcode :)

Автор: Martin R Размещён: 17.10.2015 10:31
Вопросы из категории :
32x32