Skip to content

Latest commit

 

History

History
580 lines (336 loc) · 25.9 KB

5.2 Glossary.md

File metadata and controls

580 lines (336 loc) · 25.9 KB

Глоссарий Программиста

  1. Glossary of Common Swift Terms
  2. Lexicon Swift Docs

A

API - Application Programming Interface – интерфейс программирования приложений, интерфейс прикладного программирования

Access control

  1. ✔️ Access control
  2. ✔️ What’s the point of access control?
  3. документация Apple по access control

Контроль доступа позволяет вам указать, какие данные внутри структур и классов должны быть доступны внешнему миру, и вы можете выбрать четыре модификатора:

  • public - это означает, что каждый может читать и писать свойство
  • internal - это означает, что только ваш код Swift может читать и записывать свойство. Если вы отправляете свой код в качестве фреймворка для использования другими, они не смогут прочитать свойство
  • fileprivate - это означает, что только код Swift в том же файле, что и тип, может читать и записывать свойство
  • private - это наиболее строгий вариант, означающий, что свойство доступно только внутри методов, принадлежащих типу или его расширениям

при использовании внутренних модификаторов (internal, fileprivate, private) membership initializer перестает работать, поэтому в структуре обязательно нужно использовать init(var1...) или задавать дефолтное значение

alt text

Associated types (Связанные типы)

Красивый термин для протокола, принимающий дженерики

PATs - protocol with associated types

Associated data

Без ассоциативных данных:

self.count - Int?

С ассоциативными данными:

self.count! - Int

Int и Int? - разные данные.

Associated value (присоединяемые значения) в enum'ах

Associated array = Dictionary/Set

Ассоциативные массивы (словари в Swift или Set) или Hashed Collections.

B

C

Camel case

Соглашение о кодировании в Swift, где переменные начинаются с маленькой и каждое новое слово в переменной пишется с большой: var justForExample: String - Это называется camel case, потому что немного похоже на горбы верблюда и используется для облегчения чтения слов в именах переменных.

Computed property

  1. ✔️ Properties

Переменная, которая считается во время ее вызова.

    var investmentPlan: String {
        if age < 30 {
            return "Shares"
        } else {
            return "Bonds"
        }
    }

! Всегда должна быть var ! Всегда после переменной должен быть указан тип ! Всегда должна возвращать это указанный тип

ContextMenu

Контекстное меню выглядит вот так:

alt text

CLI

CLI (Command Line Interface): еще один пример — с командной строкой в Windows или с терминалом для Linux-систем и MacOS. Когда мы вызываем командную строку и пишем в ней различные команды, мы взаимодействуем с операционной системой.

D

Devops

Devops – DEVelopment, OPs – operations

DevOps представляет собой набор методов разработки программного обеспечения, которые сочетают в себе разработку программного обеспечения (Dev) и информационные технологии операций (OPS), чтобы сократить жизненный цикл разработки систем.

data buinding

решает проблему обновления данных, которую решает SwiftUI. То есть data buinding - это имплементация

E

F

G

GUI

GUI (Graphical User Interface): Когда самый обычный пользователь взаимодействует с сайтом или приложением, он пользуется GUI. Все формочки, кнопочки, иконочки, звуки и т.д., которые мы видим или слышим на сайте - это и есть GUI. Т. е. GUI - это графический способ взаимодействия пользователя с сайтом или приложением. Так как пользователи как правило не используют иные способы взаимодействия с программами, у большинства людей есть четкое представление о том, что интерфейс это обязательно что-то про дизайн или графическое отображение. Но как мы только что выяснили, интерфейс - это способ взаимодействия чего-либо с чем-либо.

H

I

inout

  1. ✔️ When should you use inout parameters?
  2. ✔️ inout parameters

Параметры функции изменять нельзя, и, чтобы обойти это ограничение, добавим inout-параметр, который допускает изменение. Это тот же указатель в си (*), для передачи переменной в качестве inout необходимо добавить &.

var num1: Int = 1
var char1 = "a"

func changeNumber(num: Int) {
    var num = num
    num = 2
}
changeNumber(num: num1)
print(num1) // 1

func changeChar(char: inout String) {
    char = "b"
}
changeChar(char: &char1)
print(char1) // b

нельзя передавать константы (let) как inout параметр (&my_let)

J

K

L

lazy property

  1. ✔️ When should properties be lazy?
  2. ✔️ Swift Lazy Property Initialization

lazy свойства Swift позволяют нам отложить создание свойства до его фактического использования, что делает их похожими на вычисляемое свойство. Однако, в отличие от вычисляемого свойства, они сохраняют результат, который вычисляется, так что последующие обращения к свойству не повторяют работу. Это позволяет им обеспечивать дополнительную производительность, когда они не используются (потому что их код никогда не запускается), и дополнительную производительность, когда они используются повторно (поскольку их значение кэшируется).

ленивые свойства всегда объявляются с помощью var

M

(Modal Popups) Модальные всплывающие окна

  • Модальным называется такое представление, при котором ничего нельзя выполнить, пока оно не будет удалено с экрана (всплывающие окна). Как например всплывающее окно при нажатии на edit в Landmarks

When you present a view modally, the destination view covers the source view and replaces the current navigation stack.

You present a view modally when you want to break out of your app’s normal flow.

(Non-modal view) Не Модальные окна

  • это просто карта например в приложениие Landmarks

N

O

P

Placeholder

Placeholder - подсказка, расположенная внутри каждого поля подписной формы:

placeholder

Property wrappers

  1. ✔️ Modifying program state
  • @State - все то, что изменяется

  • @StateObject

  • @ObservedObject

  • @Publishers

Parameter

func square(number: Int) {
    print(number * number)
}

number - это параметр функции

  • willSet - вызывается когда свойство собирается быть изменененным (до его изменения). В willSet Swift предоставляет вашему коду специальное значение, называемое newValue, которое содержит новое значение свойства.

  • didSet - вызывается когда свойство уже изменено (после его изменения). В didSet вам дается oldValue для представления предыдущего значения.

Пример правильного использования:

struct FishTank {
    var capacity: Int
    var fishCount: Int {
        didSet {
            if fishCount >= self.capacity {
                capacity = fishCount
                print("capacity changed to \(capacity)")
            }
        }
    }
}

var new = FishTank(capacity: 1, fishCount: 2)

new.fishCount = 10 // capacity changed to 10

Q

R

S

SemVer (Semantic Versioning Specification)

Семантическое управление версиями

Учитывая номер версии MAJOR.MINOR.PATCH, увеличьте:

  • MAJOR - версия при внесении несовместимых изменений API.
  • MINOR - версия, когда вы добавляете функциональность с обратной совместимостью.
  • PATCH - версия, когда вы исправляете ошибки с обратной совместимостью.

Дополнительные метки для метаданных предварительной версии и сборки доступны как расширения формата MAJOR.MINOR.PATCH.

T

Type inference (аннотация типов)

let name = "Tanya" - полагаться на вывод типа Swift. Без аннотации типов: let name: String = "Tanya"

Когда следует использовать аннотации типов в Swift?

  • Swift не может понять, какой тип следует использовать

Обычно такое происходит в более сложном коде. Например, если вы загружали какие-то данные из Интернета и вы знаете их тип, а Swift может не знать это заранее.

  • Вы хотите, чтобы Swift использовал тип, отличный от стандартного

var score: Double = 1000; print = 1000.0

  • Вы пока не хотите присваивать значение

var name: String

U

V

Variadic function

  1. ✔️ Variadic functions
  2. ✔️ When to use variadic functions

Вариативные функции Swift позволяют нам принимать любое количество параметров одного типа, разделенных запятыми, для этого достаточно написать ... после его типа. Внутри функции они передаются нам в виде массива, который мы можем индексировать, перебирать и т. Д.

Итак, Int параметр - это одно целое число, тогда как Int... это ноль или более целых чисел - потенциально сотни.

Внутри функции Swift преобразует значения, которые были переданы в массив целых чисел, так что вы можете перебирать их по мере необходимости.

func square(numbers: Int...) {
    for number in numbers {
        print("\(number) squared is \(number * number)")
    }
}

square(numbers: 1, 2, 3, 4, 5) // 1 squared is 1 \n 2 squared is 4 \n 3 squared is 9 \n 4 squared is 16 \n 5 squared is 25

print("Haters", "gonna", "hate") - print() also variadic function

W

Witness

Значение или тип, удовлетворяющий требованию протокола. Отсюда и название Witness Table.

X

Y

Z


Русский алфавит

А

Атомарность текста

Было: Text(viewModel.showWarning ? AssessmentStrings.totalAssessmentCommentWarning : "")

Сообщение лучше вынести в отдельный var, что бы поддержать атомарность, например

var warning: String {
 viewModel.showWarning ? AssessmentStrings.totalAssessmentCommentWarning : ""
}

Рискуя на себя навлечь обвинения в сексизме, таки не удержусь и приведу пример атомарной операции: беременность - операция строго атомарная, всегда есть один и только один отец (всякие генные ухищрения вынесем за скобки).

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

Б

В

Г

Гейзенбаг

Плавающий баг (гейзенбаг) - ошибка, которая в одних и тех же условиях то воспроизводится, то нет

Д

Трансформация данных

кодирование (запись)/encoding/encode

Кодирование - преобразование данных из удобной для использования информации в форму удобную для передачи, хранения или автоматической переработки.

В Swift выполняет данную роль протокол Encodable

Пример: схема кодирования JSON/XML, ASCII, Азбука Морзе. SOS - в кодировке Азбуке Морзе ...---...

декодирование (чтение)/decoding/decode

Декодирование - преобразование данных из закодированного (или зашифрованного) формата обратно в его исходное или полезное представление.

В Swift выполняет данную роль протокол Decodable

Пример: из ...---... в SOS

бикодирование (кодирование и декодирование данных)

Бикодирование - позволяя типу данных быть и кодируемым, и декодируемым.

В Swift выполняет данную роль протокол Codable

Е/Ё

Ж/З

И

Инвалидация

Аннулирование/удаление старого/пометки как устаревших или недействительных.

Н/р: Допускается и инвалидация арбитражного соглашения, заключенного в ненадлежащей форме.

Интерполяция

"hello, \(name)" - () это интерполяция (возможность помещать переменные внутри ваших строк) - текст может динамически изменяться

extension String.StringInterpolation {
    mutating func appandInterpolation(if condition: @autoclosure () -> Bool, _ literal: StringLiteralType {
        guard condition() else { return }
        appendLiteral(literal)
        }
}

let toggle = true
  1. print("Intepolation: \\(if: toggle, "this is true")")

то же самое, что и

  1. print("Intepolation: \\(toggle \? "this is true" \: "") ")

Вывод: 1) Interpolation: this is true 2) Interpolation: this is true

Интерфейс

Интерфейс - это совокупность способов, средств, правил и возможностей взаимодействия кого-либо или чего-либо с кем-либо или чем-либо.

К

Л

М

Метод - numberOfRow:

  1. ✔️ What’s the difference between a function and a method?

Метод - это функция привязанная к типам (структур, протоколов, классов, перечислениям)

protocol TableViewViewModelType {
    func numberOfRow() -> Int
}

Отличия метода от функции:

  • Методы могут ссылаться на другие свойства и методы внутри этого типа, что означает, что вы можете написать describe() метод для User типа, который печатает имя пользователя, возраст и город;
  • Методы не загрязняют пространство имен;

Н

О

П

Пространство имен (Namespace)

Пространства имен используются для организации кода в логические группы и для предотвращения конфликтов имен, которые могут возникнуть, особенно если ваша база кода включает несколько библиотек.

Пагинация

Таблица - элемент UI, способный отображать большое количество данных используя вертикальный скролл (прокрутку).

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

Полиномиальное время

Полиномиальное время — это когда время выполнения алгоритма увеличивается с ростом объема данных, но не слишком резко (не так быстро) по мере увеличения входных данных, как в степенной функции, например 𝑛^2 или 𝑛^3, где n — это кол-во входных данных.

BigO

Алгоритмы с полиномиальным временем, например 𝑂(𝑛) или 𝑂(𝑛^2) более эффективными, чем экспоненциальные, такие как 𝑂(2^𝑛), где время выполнения растёт намного быстрее при увеличении 𝑛 n.

Р

Рекурсия

Рекурсия — это метод программирования, при котором функция вызывает саму себя.

Рекуррентная функция (или рекуррентное соотношение) — это математическое определение, которое задаёт значение функции через её предыдущие значения.

Рекурсия часто используется для реализации рекуррентных функций в программировании.

С

Свойство - numberOfRow:

protocol TableViewViewModelType {
    var numberOfRow: Int { get }
}

Сабскрипт subscript

Array[] - [] это сабскрипт

Сленг

TL;DR - too long; don`t read (ниасилил, многабукаф)

  1. слишком долгий текст не хочу его читать;
  2. лучше полный текст не читать, а достаточно прочитать то, что под пометкой TL;DR

WIP - work in progress

TBD - to be determined (еще будет дописываться)

ASAP - as soon as possible (как можно быстрее)

FYI - for your information, «к вашему сведению»

  1. Наличие этой аббревиатуры в письме означает, что информация может быть вам интересна, но не требуется никаких конкретных действий

nit - nitpicking (придирка)

RTFM - read the fuckin manual (прочитай документацию)

Т

У

Ф/Х/Ц

Хеширование

Хеширование (от англ. hash - рубить в фарш, мешанина) - преобразование информации неограниченной длинны в значение (хеш) фиксированной длинны.

Примеры:

  • MD5:

    Входные данные: "example"

    Хеш: 1a79a4d60de6718e8e5b326e338ae533

  • SHA-1:

    Входные данные: "example"

    Хеш: 5af489d8a9b59a0b62fd4d8a1a4e143d105a0985

Ш/Щ/Э/Ю/Я

Экзмепляр (объект) класса

// класс
class Person {
    var name: String
}

let bob = Person()

И Person(), и bob являются объектами, но с разной семантикой:

  • Person() - объект вызываете конструктор объекта класса Person;
  • bob объект экземпляря класса Person;

Экстраполяция/Интерполяция

Associated values

  1. ✔️ Enum associated values

Без ассоциативных данных:

enum Activity {
    case bored
    case running
    case talking
    case singing
}

С ассоциативными данными:

enum Activity {
    case bored
    case running(destination: String)
    case talking(topic: String)
    case singing(volume: Int)
}

5.1 Swift Theme | Back To iOSWiki Contents | 5.3 Data Representations Theme Folder