вторник, 27 июня 2017 г.

Swift 6. Strings and Characters

В этом уроке рассмотрены строки String и символы Character.
Домашнее задание 6 урок:

1. Выполните задание 
 Создать пять строковых констант
Одни константы это только цифры, другие содержат еще и буквы

Найти сумму всех этих констант приведя их к Int
только вместо forced unwrapping и optional binding используйте оператор ??

Когда посчитаете сумму, то представьте свое выражение в виде строки
Например: 5 + nil + 2 + 3 + nil = 10

но в первом случае используйте интерполяцию строк, а во втором конкатенацию

2. Поиграйтесь с юникодом и создайте строку из 5 самых классных по вашему мнению символов,
можно использовать составные символы. Посчитайте длину строки методом SWIFT и Obj-C

3. Создайте строку английский алфавит, все буквы малые от a до z

задайте константу - один из символов этого алфавита

Используя цикл for определите под каким индексов в строке находится этот символ


import Foundation
//Lesson 6. Strings and Characters

/*
 1. Выполните задание #1 урока о базовых операторах: http://vk.com/topic-58860049_31536965
 только вместо forced unwrapping и optional binding используйте оператор ??

 Когда посчитаете сумму, то представьте свое выражение в виде строки
 Например: 5 + nil + 2 + 3 + nil = 10

 но в первом случае используйте интерполяцию строк, а во втором конкатенацию
 */
print("N1\n")

let arrayString = ["2", "a32", "4", "b", "4"]
var sum = 0
var sumString = ""
for stringInt in arrayString {
    let value = Int(stringInt)
    sum += value ?? 0
    if !sumString.isEmpty {
        sumString += " + "
    }
    if let intValue = value {
        sumString += String(intValue)
    } else {
        sumString += "nil"
    }
}
print("\(sumString) = \(sum)")

/*
 2. Поиграйтесь с юникодом и создайте строку из 5 самых классных по вашему мнению символов,
 можно использовать составные символы. Посчитайте длину строки методом SWIFT и Obj-C
 */

print("\nN2\n")

let stringUnicode = "\u{1F436} \u{1F496} \u{1F425} \u{1F431} \u{1F428}"

print(stringUnicode)
print("Length Swift : \(stringUnicode.characters.count). Length Objective-C: \((stringUnicode as NSString).length)")

/*
 3. Создайте строку английский алфавит, все буквы малые от a до z

 задайте константу - один из символов этого алфавита

 Используя цикл for определите под каким индексов в строке находится этот символ
 */
print("\nN3\n")

let alphabetString = "abcdefghijklmnopqrstuvwxyz"
var searchCharacter: Character = "m"
let index = alphabetString.index(of: searchCharacter)
var indexFor = 0
for letter in alphabetString {
    if letter == searchCharacter {
        print("Index \"\(searchCharacter)\" in Alphabet: \"\(alphabetString)\" is: \(indexFor)")
        break
    }
    indexFor += 1
}
if indexFor == alphabetString.characters.count  {
    print("Character \"\(searchCharacter)\" not found in Alphabet: \"\(alphabetString)\"")
}

*************************************************************************

N1

2 + nil + 4 + nil + 4 = 10

N2

🐶 💖 🐥 🐱 🐨
Length Swift : 9. Length Objective-C: 14

N3

Index "m" in Alphabet: "abcdefghijklmnopqrstuvwxyz" is: 12

понедельник, 26 июня 2017 г.

Swift 5. Basic Operators

В этом уроке рассматриваются базовые операторы (унарные, бинарные и тернарные), а так же Range Operator.
Домашнее задание к  уроку 5:

1. Посчитать количество секунд от начала года до вашего дня рождения. Игнорируйте високосный год и переходы на летнее и зимнее время. Но если хотите - не игнорируйте :)

2. Посчитайте в каком квартале вы родились

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

Убедитесь что ваши вычисления в голове или на бумаге совпадают с ответом. Обратите внимание на приоритет операций

4. Шахматная доска 8х8. Каждое значение в диапазоне 1…8. При заданных двух значениях по вертикали и горизонтали определите цвет поля. Если хотите усложнить задачу, то вместо цифр на горизонтальной оси используйте буквы a,b,c,d,e,f,g,h


//Lesson 5. Basic Operator

/*
 1. Посчитать количество секунд от начала года до вашего дня рождения. Игнорируйте високосный год и переходы на летнее и зимнее время. Но если хотите - не игнорируйте :)
 */
print("N1\n")
// 04 august

let numberDay = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 4
let numberSecond = numberDay * 24 * 60 * 60
print("Number Second to 04.08: \(numberSecond)")

/*
 2. Посчитайте в каком квартале вы родились
 */
print("\nN2\n")

let monthBirthday = 8
var numberKvartal = monthBirthday / 3
numberKvartal += monthBirthday % 3 > 0 ? 1 : 0
print("Number quarter 04.08: \(numberKvartal)")

/*
3. Создайте пять переменных типа Инт и добавьте их в выражения со сложением, вычитанием, умножением и делением. В этих выражениях каждая из переменных должна иметь при себе унарный постфиксный или префиксный оператор. Переменные могут повторяться.

Убедитесь что ваши вычисления в голове или на бумаге совпадают с ответом. Обратите внимание на приоритет операций
*/
print("\nN3\n")
print("No infix and postfix operators ++ -- in new  Swift version")

/*
4. Шахматная доска 8х8. Каждое значение в диапазоне 1…8. При заданных двух значениях по вертикали и горизонтали определите цвет поля. Если хотите усложнить задачу, то вместо цифр на горизонтальной оси используйте буквы a,b,c,d,e,f,g,h
*/
print("\nN4\n")

let xChessCoordinat = ["a", "b", "c", "d", "e", "f", "g", "h"]

let chessPoint = ("e", 7)

if let index = xChessCoordinat.index(of: chessPoint.0) {
    let sum = index + 1 + chessPoint.1
    if (sum) % 2 == 0 {
        print("Black square")
    } else {
        print("White square")
    }
    
} else {
    print("Error first coordinate")
}

четверг, 22 июня 2017 г.

Swift 4. The Basics (Optionals)

В этом уроке рассматриваются опционалы - типы у которых значения, могут быть  nil.

Домашнее задание:

1. Создать пять строковых констант

Одни константы это только цифры, другие содержат еще и буквы

Найти сумму всех этих констант приведя их к Int

(Используйте и optional binding и forced unwrapping)

2. С сервера к нам приходит тюпл с тремя параметрами:

statusCode, message, errorMessage (число, строка и строка)

в этом тюпле statusCode всегда содержит данные, но сама строка приходит только в одном поле

если statusCode от 200 до 300 исключительно, то выводите message,

в противном случает выводите errorMessage

После этого проделайте тоже самое только без участия statusCode

3. Создайте 5 тюплов с тремя параметрами:

имя, номер машины, оценка за контрольную

при создании этих тюплов не должно быть никаких данных

после создания каждому студенту установите имя

некоторым установите номер машины

некоторым установите результат контрольной

выведите в консоль:

- имена студента
- есть ли у него машина
- если да, то какой номер
- был ли на контрольной
- если да, то какая оценка


//Lesson 4. Optional

/*
 1. Создать пять строковых констант

 Одни константы это только цифры, другие содержат еще и буквы

 Найти сумму всех этих констант приведя их к Int

 (Используйте и optional binding и forced unwrapping)
 */

print("1\n")
var sum = 0
let (value1, value2, value3, value4, value5) = ("2", "4b", "1", "1a", "5")
if let intValue1 = Int(value1) {
    sum += intValue1
}
if let intValue2 = Int(value2) {
    sum += intValue2
}
if let intValue3 = Int(value3) {
    sum += intValue3
}
if let intValue4 = Int(value4) {
    sum += intValue4
}

if Int(value5) != nil  {
    sum += Int(value5)!
}

print("Sum:", sum)

/*
 2. С сервера к нам приходит тюпл с тремя параметрами:

 statusCode, message, errorMessage (число, строка и строка)

 в этом тюпле statusCode всегда содержит данные, но сама строка приходит только в одном поле

 если statusCode от 200 до 300 исключительно, то выводите message,

 в противном случает выводите errorMessage

 После этого проделайте тоже самое только без участия statusCode
 */

print("\n2.1\n")

let response: (statusCode: Int, message: String?, errorMessage: String?) = (300, "Response", nil)
if response.statusCode >= 200 && response.statusCode <= 300 {
    if let message = response.message {
        print("Success. Message:", message)
    } else {
        print("Success. No Message:")
        
    }
} else {
    if let message = response.errorMessage {
        print("Error. Message:", message)
    } else {
        print("Error. No Message:")
    }
}

print("\n2.2\n")

if let message = response.message {
    print("Success. Message:", message)
} else if let errorMessage = response.errorMessage {
    print("Error. Message:", errorMessage)
} else {
    print("Error. No Message:")
}

/*
 3. Создайте 5 тюплов с тремя параметрами:

 имя, номер машины, оценка за контрольную

 при создании этих тюплов не должно быть никаких данных

 после создания каждому студенту установите имя

 некоторым установите номер машины

 некоторым установите результат контрольной

 выведите в консоль:

 - имена студента
 - есть ли у него машина
 - если да, то какой номер
 - был ли на контрольной
 - если да, то какая оценка */

print("\n3\n")

var student1: (name: String?, carNumber: String?, mark: Double?)
var student2: (name: String?, carNumber: String?, mark: Double?)
var student3: (name: String?, carNumber: String?, mark: Double?)
var student4: (name: String?, carNumber: String?, mark: Double?)
var student5: (name: String?, carNumber: String?, mark: Double?)

student1.name = "Vasya"
student2.name = "Petia"
student3.name = "Ivan"
student4.name = "Nikolay"
student5.name = "Alex"

student1.carNumber = "AK54"
student1.mark = 4.5
student2.mark = 3.1
student5.carNumber = "RUS"

let arrayStudent = [student1, student2, student3, student4, student5]
for student: (name: String?, carNumber: String?, mark: Double?) in arrayStudent {
    let (name, carNumber, mark) = student
    if let realName = name {
        print("Name:", realName, terminator: " ")
    }
    if let realNumber = carNumber {
        print("Car:", realNumber, terminator: " ")
    }
    if let realmark = mark {
        print("Mark:", realmark, terminator: " ")
    }
    print("")

}

Swift 3. The Basics (Tuples)

В 3 уроке рассматриваются кортежи - Tuples.

Домашнее задание:

1. Создать тюпл с тремя параметрами:

- максимальное количество отжиманий
- максимальное количество подтягиваний
- максимальное количество приседаний

Заполните его своими достижениями :)

Распечатайте его через println()

2. Также сделайте три отдельных вывода в консоль для каждого параметра

При том одни значения доставайте по индексу, а другие по параметру

3. Создайте такой же тюпл для другого человека (супруги или друга)

с такими же параметрами, но с другими значениями

Используйте промежуточную переменную чтобы поменять соответствующие значения

первого тюпла на значения второго

4. Создайте третий тюпл с теми же параметрами, но значения это разница

между соответствующими значениями первого и второго тюплов

Результат выведите в консоль


//Lesson 3. Tuples

/*
 1. Создать тюпл с тремя параметрами:

 - максимальное количество отжиманий
 - максимальное количество подтягиваний
 - максимальное количество приседаний

 Заполните его своими достижениями :)

 Распечатайте его через println()
 */

print("1\n")

var myResult = (pushUps: 20, pullUps: 7, squats: 30)
print("My result\nPushUps: \(myResult.pushUps). PullUps: \(myResult.pullUps). Squats: \(myResult.squats)")

/*
 2. Также сделайте три отдельных вывода в консоль для каждого параметра
 При том одни значения доставайте по индексу, а другие по параметру
 */

print("\n2\n")

var (_, _, mySquats) = myResult

print("PushUps: \(myResult.0)")
print("PullUps: \(myResult.pullUps)")
print("Squats: \(mySquats)")

/*
 3. Создайте такой же тюпл для другого человека (супруги или друга)
 с такими же параметрами, но с другими значениями
 Используйте промежуточную переменную чтобы поменять соответствующие значения
 первого тюпла на значения второго
 */

print("\n3\n")

let tempResult = myResult

var friendResult = (pushUps: 25, pullUps: 10, squats: 35)

myResult = friendResult
friendResult = tempResult

print("My Result:", myResult)
print("Friend Result:", friendResult)

/*
 4. Создайте третий тюпл с теми же параметрами, но значения это разница
 между соответствующими значениями первого и второго тюплов
 Результат выведите в консоль
 */

print("\n4\n")

let substractPushUps = abs(myResult.pushUps - friendResult.pushUps)
let substractPullUps = abs(myResult.pullUps - friendResult.pullUps)
let substractSquats = abs(myResult.squats - friendResult.squats)


var substractResult = (pushUps: substractPushUps, pullUps: substractPullUps, squats: substractSquats)

*************************************************************

1

My result
PushUps: 20. PullUps: 7. Squats: 30

2

PushUps: 20
PullUps: 7
Squats: 30

3

My Result: (pushUps: 25, pullUps: 10, squats: 35)
Friend Result: (pushUps: 20, pullUps: 7, squats: 30)

4

Substraction Result:  (pushUps: 5, pullUps: 3, squats: 5)

Swift 2. The Basics (Base Type)

Во втором уроке Алексей продолжает рассмотрение главы документации The Basics и рассматривает базовые типы, запись целых чисел в 10, 2, 8 и 16 - ричных формах, размеры различных целых типов и создания собственного алиаса (другого названия) для базового типа.

Домашнее задание к уроку 2:

1. Выведите в консоль минимальные и максимальные значения базовых типов, не ленитесь :)

2. Создайте 3 константы с типами Int, Float и Double

Создайте другие 3 константы, тех же типов: Int, Float и Double,

при чем каждая из них это сумма первых трех, но со своим типом

3. Сравните Int результат суммы с Double и выведите отчет в консоль

 Код:

// The Basics 2 Home work

/*
 1 Выведите в консоль минимальные и максимальные значения базовых типов, не ленитесь :)
 */

print("\n1.\n")
print("For 'Int' type. MIN value \(Int.min), MAX value: \(Int.max).")
print("For 'UInt' type. MIN value \(UInt.min), MAX value: \(UInt.max).")
print("For 'Int8' type. MIN value \(Int8.min), MAX value: \(Int8.max).")
print("For 'UInt8' type. MIN value \(UInt8.min), MAX value: \(UInt8.max).")
print("For 'Int16' type. MIN value \(Int16.min), MAX value: \(Int16.max).")
print("For 'UInt16' type. MIN value \(UInt16.min), MAX value: \(UInt16.max).")
print("For 'Int32' type. MIN value \(Int32.min), MAX value: \(Int32.max).")
print("For 'UInt32' type. MIN value \(UInt32.min), MAX value: \(UInt32.max).")
print("For 'Int64' type. MIN value \(Int64.min), MAX value: \(Int64.max).")
print("For 'UInt64' type. MIN value \(UInt64.min), MAX value: \(UInt64.max).")


/*
 2. Создайте 3 константы с типами Int, Float и Double
 Создайте другие 3 константы, тех же типов: Int, Float и Double,
 при чем каждая из них это сумма первых трех, но со своим типом
 */

print("\n2.\n")

let intConst = 3
let doubleConst = 2.8
let floatConst: Float = 1.7

let intSum = Int( Double(intConst) + doubleConst + Double(floatConst))
let floatSum = Float( Double(intConst) + doubleConst + Double(floatConst))
let doubleSum = Double(intConst) + doubleConst + Double(floatConst)

print("Int Const: \(intConst), Double Const: \(doubleConst), Float Const: \(floatConst)")

print("Int Sum: \(intSum), Double Sum: \(doubleSum), Float Sum: \(floatSum)")


/*
 3. Сравните Int результат суммы с Double и выведите отчет в консоль
 */

print("\n3.\n")

if doubleSum > Double(intSum) {
    print("Double Sum > Int Sum")
} else if doubleSum == Double(intSum) {
    print("Int Sum == Double Sum")
} else {
    print("Int Sum > Double Sum")

}


*****************************************************************

1.

For 'Int' type. MIN value -9223372036854775808, MAX value: 9223372036854775807.
For 'UInt' type. MIN value 0, MAX value: 18446744073709551615.
For 'Int8' type. MIN value -128, MAX value: 127.
For 'UInt8' type. MIN value 0, MAX value: 255.
For 'Int16' type. MIN value -32768, MAX value: 32767.
For 'UInt16' type. MIN value 0, MAX value: 65535.
For 'Int32' type. MIN value -2147483648, MAX value: 2147483647.
For 'UInt32' type. MIN value 0, MAX value: 4294967295.
For 'Int64' type. MIN value -9223372036854775808, MAX value: 9223372036854775807.
For 'UInt64' type. MIN value 0, MAX value: 18446744073709551615.

2.

Int Const: 3, Double Const: 2.8, Float Const: 1.7
Int Sum: 7, Double Sum: 7.50000004768372, Float Sum: 7.5

3.


Double Sum > Int Sum

Swift 1. The Basics

Я решил пройти курс Алексея Скутаренко по Swift, который находится https://vk.com/iosdevcourse. На текущий момент вышел уже Swift 4.0, поэтому синтаксис языка может иметь различия, но тем не менее суть не изменилась.

Алексей в каждом уроке рассматривает главы из официальной документации Apple, которая находится здесь

В первой главе рассматриваются основные понятия константы и переменные, основные типы, способы вывода в консоль и др. базовые понятия.

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


// The Basics example

let greeting = "Hello!"
let firstName, lastName: String
firstName = "Alex"
lastName = "Tim"
let yearBorn: Int
yearBorn = 1_983
var weight = 63.5
weight = 64.7
var city = "Novosibirsk"

print(greeting)
print("My name:",firstName, lastName, separator: " ", terminator: "\n")
print("My weight is " + String(weight) + "kg")
print("I live in \(city). ", terminator: "")

print("I was born in \(yearBorn) year")


Вывод в консоли:
________________________

Hello!
My name: Alex Tim
My weight is 64.7kg
I live in Novosibirsk. I was born in 1983 year