Swift marathon: Homework
June 17, 2022

Homework. SWIFT - 10. Функции

На этот раз я изучаю как работают функции (func) в языке программирования Swift. Посмотрим, что из этого выйдет.

1. Создайте пару функций с короткими именами, которые возвращают строку с классным символом или символами. Например heart() возвращает сердце и т.п. Вызовите все эти функции внутри принта для вывода строки этих символов путем конкатенации.

func earthGlobe() -> String { 
return "\u{1F30F}" 
} 

func volcano() -> String { 
return "\u{1F30B}" 
} 

func statue() -> String { 
return "\u{1F5FD}" 
} 

func rock() -> String { 
return "\u{1FAA8}" 
} 

func wood() -> String { 
return "\u{1FAB5}" 
} 

print(earthGlobe() + volcano() + statue() + rock() + wood())

2. Снова шахматные клетки. Реализовать функцию, которая принимает букву и символ и возвращает строку “белая” или “черная”. Строку потом распечатайте в консоль

let x:Character = "D"
let yIdx = 2
let chessCells = "ABCDEFGHIJ"

if let index = chessCells.index(of: x) {
    let xIdx = index.encodedOffset
    print((xIdx + yIdx) % 2 > 0 ? "Black" : "White")
} else {
    print("Error")
}

Порядок действий:

  1. Задаем константу x типа Character.
  2. Задаем константу yIdn типа Int.
  3. Задаем константу chessCells со всеми буквами по x координате.
  4. Если константа index равна chessCells.index(of: x)
  5. Константа xIdx равна index.encodedOffset
  6. выводим в консоль ((xIdx + yIdx) % 2 > 0 ? "Black" : "White")
  7. иначе выводим в консоль "Error"

Обьяснение:

.index(of: x) - проверяет присутствие и устанавливает индекс символу "D" в коллекции символов "ABCDEFGHIJ"

А теперь заворачиваем в функцию:

let x:Character = "D"
let yIdx = 2

func whatColor(_ x: Character,_ yIdx: Int) -> String {

    let chessCells = "ABCDEFGHIJ"
    if let index = chessCells.index(of: x) {

        let xIdx = index.encodedOffset
        return (xIdx + yIdx) % 2 > 0 ? "Black" : "White"

    } else {

    return "Error"

    }

}


print("\(x)\(yIdx): ", whatColor(x, yIdx))


3. Создайте функцию, которая принимает массив, а возвращает массив в обратном порядке. Можете создать еще одну, которая принимает последовательность и возвращает массив в обратном порядке. Чтобы не дублировать код, сделайте так, чтобы функция с последовательностью вызывала первую.

// 1
let  array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

func revArr(with array: [Int]) -> [Int] {
    return array.reversed()
}
print("Before reverse: \(array) \nAfter reverse: ",revArr(with: array))

// 2
func revSeq(sequence: Int...) -> [Int] {
    return revArr(with: sequence)
}
print("Reverse sequence:", revSeq(sequence: 10, 20, 30, 40, 50))

В первой функции мы получаем массив из константы array, а во второй мы задаем константу/переменную прямиком в функции, а значение во время вызова функции.

4. Разберитесь с inout самостоятельно и выполните задание номер 3 так, чтобы функция не возвращала перевернутый массив, но меняла элементы в существующем. Что будет если убрать inout?

func revArr(_ array: inout [Int]) {
    array = array.reversed()
}
var  array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
revArr(&array)
print("reverse: \(array)")

//reverse: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

5. Создайте функцию, которая принимает строку, убирает из нее все знаки препинания, делает все гласные большими буквами, согласные маленькими, а цифры меняет на соответствующие слова (9 -> nine и т.д.)

func changedText(text: inout String) {
    var resultText = ""
    let digitDictionary = [0: "Zero", 1: "One", 2: "Two", 3: "Three", 4: "Four", 5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"]
    for character in text { 
        let lowerCaseCharacter = String(character).lowercased()
    switch lowerCaseCharacter {
    case "a", "e", "i", "o", "u", "y":
        resultText += lowerCaseCharacter.uppercased()
    case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z":
        resultText += lowerCaseCharacter
    case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9":
        if let word = digitDictionary[Int(lowerCaseCharacter)!] {
            resultText += word
        }
    default: resultText += " "
    }
    text = resultText
    }
}

var text = "Swift is a general-purpose, multi-paradigm, compiled programming language developed by Apple Inc. and the open-source community. First released in 2014, Swift was developed as a replacement for Apple's earlier programming language Objective-C, as Objective-C had been largely unchanged since the early 1980s and lacked modern language features. Swift works with Apple's Cocoa and Cocoa Touch frameworks, and a key aspect of Swift's design was the ability to interoperate with the huge body of existing Objective-C code developed for Apple products over the previous decades. It was built with the open source LLVM compiler framework and has been included in Xcode since version 6, released in 2014."

changedText(text: &text)

print("Text after changed: \n", text)


/* Text after changed: 
 swIft Is A gEnErAl pUrpOsE  mUltI pArAdIgm  cOmpIlEd prOgrAmmIng lAngUAgE dEvElOpEd bY ApplE Inc  And thE OpEn sOUrcE cOmmUnItY  fIrst rElEAsEd In TwoZeroOneFour  swIft wAs dEvElOpEd As A rEplAcEmEnt fOr ApplE s EArlIEr prOgrAmmIng lAngUAgE ObjEctIvE c  As ObjEctIvE c hAd bEEn lArgElY UnchAngEd sIncE thE EArlY OneNineEightZeros And lAckEd mOdErn lAngUAgE fEAtUrEs  swIft wOrks wIth ApplE s cOcOA And cOcOA tOUch frAmEwOrks  And A kEY AspEct Of swIft s dEsIgn wAs thE AbIlItY tO IntErOpErAtE wIth thE hUgE bOdY Of ExIstIng ObjEctIvE c cOdE dEvElOpEd fOr ApplE prOdUcts OvEr thE prEvIOUs dEcAdEs  It wAs bUIlt wIth thE OpEn sOUrcE llvm cOmpIlEr frAmEwOrk And hAs bEEn InclUdEd In xcOdE sIncE vErsIOn Six  rElEAsEd In TwoZeroOneFour
*/