То, что мы часто забываем!

Это вторая часть моей серии из двух частей, посвященных обновлению знаний iOS. Если вы хотите ознакомиться с первой частью, вот она:



1. Что такое KVC или кодирование ключевого значения

KVC - это механизм для косвенного доступа к свойству объекта с помощью строки. Это возможно, только если класс наследует NSObject класс.

Если вы удалите суперкласс NSObject в коде, тогда свойство value не будет работать и покажет ошибку компиляции.

2. Что такое выражения Key-Path?

Используя выражение #keyPath(), вы можете получить доступ к свойствам динамически.

3. Что такое неявно развернутые опции?

Если точно известно, что необязательный параметр всегда имеет значение после того, как значение было впервые установлено, в этом случае каждый раз проверяя необязательность, лучше объявить этот необязательный параметр как неявно развернутый необязательный.

4. Когда нам может потребоваться использование утверждений или предварительных условий

Утверждения и предварительные условия - это один из видов проверки, которая происходит во время выполнения. Их можно использовать для удовлетворения определенных условий перед выполнением дальнейшего кода.

Утверждения проверяются только в отладочной сборке.

Предварительные условия проверяются как в отладочной, так и в выпускной сборке.

ИЛИ, мы можем проверить условие самостоятельно и вызвать отказ утверждения или отказ предварительного условия.

5. Какие и сколько типов являются операторами диапазона.

Существует 3 типа операторов диапазона:

i) Закрытый диапазон

Он определяет диапазон (a… b) от a до b и включает b. Значение a не должно быть больше b.

ii) Полуоткрытый диапазон

Он определяет диапазон (a .. ‹b) от a до b, но не включает b.

iii) Односторонний диапазон

Он по возможности определяет одно из боковых направлений. Например, в следующем коде односторонний диапазон будет посещать все элементы массива.

6. Как использовать многострочные строковые литералы

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

7. Является ли String в Swift ссылочным или значимым типом?

Тип Swift String - это тип значения. Каждый раз, когда новая строка создается или передается как параметр функции или присваивается переменной и константе, в каждом случае создается новая копия существующей строки.

8. Как использовать строковые индексы

Значение Swift String не имеет целочисленных индексов. Потому что каждый символ может занимать разные места в памяти. Тип String, связанный с String.Index, который представляет каждую позицию символа в строке. Для доступа к символу другой позиции используйте метод index и свойство offsetBy.

9. Что такое тип подстроки и зачем нам его использовать?

Когда мы получаем часть строки, которая получается из типа Substring. Он представлен в Swift 4.0 для оптимизации производительности. Подстрока может повторно использовать часть памяти, где хранится исходная строка. Если не изменить подстроку или строку, она не будет копировать память, что повысит производительность. Правило заключается в том, что для кратковременного хранения используйте подстроку, а для долгосрочного - String. И String, и Substring соответствуют StringProtocol.

10. Может ли строка и подстрока взаимно сопоставимы и могут работать

Да, и String, и Substring соответствуют протоколу StringProtocol. Поэтому, когда вы используете операцию String, вы можете передавать значения типа String и Substring.

Проблемы:

1. Что не так с этим кодом?

var (x, y) = (1, 2)
if x = y{
	//do something
}

2. Это правильно?

let x = "My name is " + " Khan"

3. В чем ценность следующего кода?

let x = -9 % 4

a) 1

b) 0

c) -1

d) -2

4. Какое из утверждений неверное?

var age = 13
age++
++age
age = age + 1
age += 1

5. Какое значение имеет константа personType?

var age = 13
let personType = age < 18 ? "Not Adult" : age > 50 ? "Senior" : "Normal"

6. Что дает следующий код?

let num = [1, 2, 3, 4, 5]
for x in num[2...]{
    print(x)
}

7. Что не так со следующим кодом?

let name = "Mahmud Ahsan"
for x:Character in name{
    print(x)
}

8. Что дает следующий код?

let name = "Mahmud Ahsan"
let pos:String.Index = name.index(name.endIndex, offsetBy: -2)
name[posEnd]

a) n

b) a

в) не будет компилироваться

d) s

9. Угадайте значение констант newName и finalName?

var name = "Mahmud Ahsan"
name.insert("X", at: name.index(after: name.startIndex))
let newName = name
name.remove(at: name.index(name.startIndex, offsetBy: 1))
let finalName = name
newName
finalName

10. Что дает следующий код?

let x = "Good"
let y:Substring = "Good"
if x == y{
    print("equal")
}

а) ничего

б) равный

в) не будет компилироваться

Ответы:

1. Он не компилируется. Потому что операция присваивания в Swift не возвращает значения. Хотя он работает как в C, так и в Objective-C.

2. Да, + используется для конкатенации строк в Swift.

3. c) -1 - правильный ответ

4. age ++ и ++ age - неверные утверждения. Эти унарные операторы недоступны в Swift.

5. Значение: Not Adult.

6. 3, 4, 5

7. Нет ничего плохого. Строковые символы представлены символьным типом.

8. б) а - правильный ответ

9. newName = «Махмуд Ахсан», finalName = «Махмуд Ахсан»

10. б) равный - правильный ответ