Swift + Int

Маленькая структура, которая могла.

Небольшое примечание - все мои будущие сообщения будут публиковаться на моем специализированном веб-сайте, и эта публикация больше не обновляется. Спасибо за чтение!

Примитивы, также известные как типы значений, обычно не так интересны.

Int, float, double, что у вас есть. Программистам они нужны, чтобы играть свою небольшую роль в общей схеме вещей. Предоставьте эталонным типам делать тяжелую работу - расчеты, сетевые вызовы и другие важные дела.

В Swift Int вырос из typedef и превратился в структуру за кулисами - и они на самом деле довольно хороши. На этой неделе давайте кратко рассмотрим, на что способно это 64-битное целое число со знаком.

В этом()

Init - это последнее, что обычно ассоциируется с целым числом. В Objective-C программисты использовали полезный NSNumber для упрощения арифметических операций. NSInteger, NSUInteger, int… они могли делать то, что могли, и все, пока NSNumber не подхватил их в свои любящие объятия.

Скорее всего, это далеко от истины. Переход к Int как структуре дает ему несколько преимуществ, которых у нас не было в прошлом. Int - это возвращаемый тип по умолчанию, который быстро получает, когда переменная инициализируется целочисленным литералом:

let intLiteral = 1

Черт возьми, Int может даже принимать в своем инициализаторе double или float:

let twentyTwoPointFour = 22.4
//22
let intRepresentation = Int(twentyTwoPointFour)

Существует более 15 способов быстрой инициализации Int, от малоизвестных до невероятно полезных.

Члены Int

Более того, Swift продолжает разрабатывать свои пресловутые мускулы с помощью Int, используя его элементы. Есть оба умных члена экземпляра, которые можно соединить вместе с некоторыми статическими.

Вам нужно знать максимально допустимое значение, которое может выдержать Int? Может, минимум? Swift, во всяком случае, избавит вас от поездки в Google с помощью быстрой остановки в файле игровой площадки и статических членах Int:

//9,223,372,036,854,775,807
let intMax = Int.max
//-9,223,372,036,854,775,808
let intMin = Int.min
//Empty bitset (because of course)
let allZero = Int.allZeros

Чтобы не отображать эти блестящие статические значения, Int также имеет множество полезной информации, хранящейся в его членах экземпляра. От простого описания до hashValue у Int есть все, что нужно о нем знать:

let plainOldInt = 1
//Opaque value
plainOldInt.value
//Changes byte order if needed - 72,057,594,037,927,936
plainOldInt.bigEndian
//Ditto - 1
plainOldInt.littleEndian
//Current Int with the btye order swapped - 72,057,594,037,927,936
plainOldInt.byteSwapped
//1
plainOldInt.hashValue
//"1"
plainOldInt.description

Это много информации, которую typedef не может дать вам сам по себе в Objective-C. Когда Apple заявила, что Swift должен стать современным, они явно имели это в виду.

Функции экземпляра

Преимущества проявления Int как структуры продолжают накапливаться. Если нужно выполнить какую-либо математическую операцию с Int (или иначе), помимо типичного сложения / вычитания / деления / умножения - методы экземпляра Int с радостью сделают это.

Они варьируются от простейших:

let plainOldInt = 1
//2
plainOldInt.successor()
//0
plainOldInt.predecessor()

в среднюю школу:

let plainOldInt = 1
//9
plainOldInt.distanceTo(10)
//11
plainOldInt.advancedBy(10)

… И средняя школа:

let plainOldInt = 1
//1
plainOldInt.toIntMax()
//[1]
plainOldInt.encode()

вплоть до аспирантуры:

//Runtime reflection!
let plainOldInt = 1
let type = plainOldInt.getMirror()
//1
type.value
//ExistentialMetaType
type.valueType
//nil
type.objectIdentifier
//0
type.count
//”1"
type.summary
//Enum Value
type.quickLookObject
//Ditto
type.disposition

Хотя протокол MirrorType практически не задокументирован, его легко использовать и понимать. Возможно, я пью быстрый кул, но тот факт, что Интс может дать отражение прямо из коробки, даёт мне бабочек.

Но, как сказал мой хороший друг Тим, если вам нужно выполнить рефлексию над Int во время выполнения - вы, вероятно, делаете это неправильно. Каким бы он ни был, тем не менее это впечатляет.

Давайте также потратим минуту, чтобы применить статические функции Int, используемые в основном для определения арифметического переполнения:

let plainOldInt = 1
//(.0 2, .1 false)
Int.addWithOverflow(plainOldInt, 1)

Этот статический метод также поддерживает варианты вычитания, умножения, деления и остатков.

Заключение

Инт владеет поясом, которым просто не терпится использовать. Он больше не привязан к другому классу для выполнения значимых операций. Давайте также не будем забывать о забавных вещах, которые вы можете делать с ним с помощью расширений. Как и swift, Int становится весьма полезным инструментом для создания приложений для iOS следующего поколения.

Джордан Морган (Jordan Morgan) - инженер-программист iOS, который руководит Dreaming In Binary.
@ jordanmorgan10.

Если вы узнали что-то о Int, пожалуйста, NSRecommend эту статью ниже.