суббота, 27 января 2018 г.

Swift 11. Closures

В 11 уроке рассматриваются замыкания.
Домашнее задание для 11 урока:
/*
 1. Написать функцию, которая ничего не возвращает и принимает только один клоужер, который ничего не принимает и ничего не возвращает . Функция должна просто посчитать от 1 до 10 в цикле и после этого вызвать клоужер. Добавьте println в каждый виток цикла и в клоужер и проследите за очередностью выполнения команд.

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

 3. Напишите функцию, которая принимает массив интов и клоужер и возвращает инт. Клоужер должен принимать 2 инта (один опшинал) и возвращать да или нет. В самой функции создайте опшинал переменную. Вы должны пройтись в цикле по массиву интов и сравнивать элементы с переменной используя клоужер. Если клоужер возвращает да, то вы записываете значение массива в переменную. в конце функции возвращайте переменную.

 используя этот метод и этот клоужер найдите максимальный и минимальный элементы массива.

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

 5. Проделайте задание №3 но для нахождения минимальной и максимальной буквы из массива букв (соответственно скалярному значению)
 */


/*
 1
 */
func testFunc(closures: () -> Void) {
    print("Start testFunc")
    for i in 0...10 {
        print(i)
    }
    closures()
}

testFunc {
    print("closures start")
}

/*
 2
 */
print("\nN 2\n")
let startArray = [2, 1, 6, 2, 6,3,2,1,65,7,3,3]
print("Start array", startArray)
print("Ascending Array", startArray.sorted(by: <))
print("Descending Array", startArray.sorted(by: >))

/*
 3
 */

print("\nN 3\n")

func testFunc3(array: [Int], closure: (Int, Int?) -> Bool ) -> Int? {
    var optional: Int?
    for number in array {
        optional =  closure(number, optional) ? number : optional
    }
    return optional
}

let resultMax = testFunc3(array: startArray) {$1 == nil ? true : $0 > $1!}
let resultMin = testFunc3(array: startArray) {$1 == nil ? true : $0 < $1!}


print("Start Array: ", startArray, ". Max:",resultMax ?? "No max value", ". Min:", resultMin ?? "No min value")

/*
 4
 */

print("\nN 4\n")

let text = "a Adsfkj;lewjqoir324234kl;jasdF;ffkjF ;mnvzxc,n<MNLK Jal;dsfQEWRaFSLJ:342;l,.mmn,sdfa"
let vowelsSet = Set(["a", "e", "i", "o", "u", "y"])
let consonantsSet = Set(["b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
                  "n", "p", "q", "r", "s", "t", "v", "w", "x", "z"]);
let digitsSet = Set(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]);

func priorityCharacter(character: Character) -> Int{
    let lowerLetter = String(character).lowercased()
    switch lowerLetter {
    case let letter where vowelsSet.contains(letter):
        return 4
    case let letter where consonantsSet.contains(letter):
        return 3
    case let letter where digitsSet.contains(letter):
        return 2
    case " ":
        return 1
    default:
        return 0
    }
}
let arraySort = text.sorted {
    let letter1LowerCased = String($0).lowercased()
    let letter2LowerCased = String($1).lowercased()

    let priority1 = priorityCharacter(character: $0)
    let priority2 = priorityCharacter(character: $1)
    if priority1 == priority2 {
        return letter1LowerCased == letter2LowerCased ? $0 < $1 : letter1LowerCased < letter2LowerCased
    } else {
        return priority1 > priority2
    }
    
}

print(String(arraySort))


/*
5
 */

print("\nN 5\n")
let lettersArray: [Character] = ["e", "w", "c", "d", "a",]

func charCompare(array: [Character], closure: (Character, Character?) -> Bool ) -> Character? {
    var optional: Character?
    for char in array {
        optional =  closure(char, optional) ? char : optional
    }
    return optional
}

let resultMaxChar = charCompare(array: lettersArray) {$1 == nil ? true : $0 > $1!}
let resultMinChar = charCompare(array: lettersArray) {$1 == nil ? true : $0 < $1!}



print("Start Array: ", lettersArray, ". Max letter:",resultMaxChar ?? "No min value" , ". Min letter:", resultMinChar ?? "No min value")

Console:

Start testFunc
0
1
2
3
4
5
6
7
8
9
10
closures start

N 2

Start array [2, 1, 6, 2, 6, 3, 2, 1, 65, 7, 3, 3]
Ascending Array [1, 1, 2, 2, 2, 3, 3, 3, 6, 6, 7, 65]
Descending Array [65, 7, 6, 6, 3, 3, 3, 2, 2, 2, 1, 1]

N 3

Start Array:  [2, 1, 6, 2, 6, 3, 2, 1, 65, 7, 3, 3] . Max: 65 . Min: 1

N 4

AaaaaaEeiocddddFFFfffffJJjjjjKkkkLLllllMmmmNnnnQqRrSssssvWwxz222333444   ,,,.:;;;;;;<

N 5

Start Array:  ["e", "w", "c", "d", "a"] . Max letter: w . Min letter: a

Комментариев нет:

Отправить комментарий