Неща, които често забравяме!

Това е втората част от моята поредица от 2 части за преглед на знанията за iOS. Ако искате да разгледате първата част, ето я:



1. Какво е KVC или кодиране на ключ-стойност

KVC е механизъм за индиректен достъп до свойството на обект чрез използване на низ. Възможно е само ако клас наследи NSObject клас.

Ако премахнете суперкласа NSObject в кода, тогава свойството стойност няма да работи и ще покаже грешка при компилиране.

2. Какво представляват изразите Key-Path?

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

3. Какво е имплицитно unwrap options?

Ако е сигурно, че опция винаги има стойност, след като стойността е зададена за първи път, в този случай проверявайки опция всеки път, по-добре е да декларирате тази опция като имплицитно разопакована опция.

4. Кога може да се наложи да използваме твърдения или предварителни условия

Твърденията и предварителните условия са един вид проверка, която се случва по време на изпълнение. Те могат да се използват за удовлетворяване на определени условия, преди да се изпълни допълнителен код.

Утвържденията се проверяват само в компилацията за отстраняване на грешки.

Предварителните условия се проверяват както при отстраняване на грешки, така и при изграждане на версия.

ИЛИ можем сами да проверим условието и да извикаме отказ на твърдението или отказ на предусловието

5. Какви и колко вида са операторите Range

Има 3 вида оператори за обхват:

i) Затворен диапазон

Той дефинира диапазон (a…b), който се простира от a до b и включва b. Стойността на a не трябва да е по-голяма от b.

ii) Полуотворен диапазон

Той дефинира диапазон (a..‹b), който се простира от a до b, но не включва b.

iii) Едностранна гама

Той определя едната странична посока, доколкото е възможно. Например в следния код едностранният диапазон ще посети всички елементи на масива.

6. Как да използваме многоредови String литерали

Използвайте “”” и “”” за начало и край на многоредовите низови литерали.

7. String в Swift са препратка или тип стойност?

Типът Swift String е тип стойност. Всеки път, когато се създава нов низ или се предава като функционален параметър или се присвоява на променлива и константа, във всеки случай се създава ново копие на съществуващия низ.

8. Как да използваме низови индекси

Стойността на Swift String няма цели числа. Тъй като всеки знак може да заеме различни места в паметта. Тип низ, свързан с String.Index, който представлява всяка позиция на знака в низа. За достъп до символа на различна позиция използвайте метода index и свойството offsetBy.

9. Какъв е типът Substring и защо трябва да го използваме?

Когато извличаме част от низ, който е резултат от тип Substring. Въведен е в Swift 4.0 за оптимизиране на производителността. Поднизът може да използва повторно част от паметта, където се съхранява оригиналният низ. Освен ако поднизът или низът не бъдат променени, това няма да копира паметта, като по този начин ще подобри производителността. Правилото е, използвайте подниз за краткосрочно съхранение, а за дългосрочно съхранение използвайте низ. Както String, така и Substring отговарят на StringProtocol.

10. Могат ли String и Substring взаимно да се сравняват и да работят

Да, и 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. в) -1 е верният отговор

4. възраст++ и ++възраст са грешни твърдения. Тези унарни оператори не са налични в Swift.

5. Стойността е: Not Adult

6. 3, 4, 5

7. Няма нищо лошо. Низовите символи са представени от Тип символ.

8. б) а е верният отговор

9. newName = „MXahmud Ahsan“, finalName = „Mahmud Ahsan“

10. б) равно е верният отговор