Как правильно пользоваться опциональными типами данных в условных операторах и циклах в Swift?
Вероятно авторы языка, стремясь к ясности и однозначности, разграничили в конструкции с while операции сравнения и присваивания.
То есть, используя только while , вы либо осуществляете присваивание переменной в цикле (при этом проверка на nil производится автоматически и не может быть произведена явно)
while var text = readLine() < //тело цикла >
Либо осуществляете проверку на nil
while (readLine() != nil) < //тело цикла >
Если вы хотите использовать сложные условия с присваиванием, то предлагается использовать специальную конструкцию while case , тогда ваше условие можно переписать так (и да, здесь будет бесконечный цикл)
while case var text = readLine(), true < //тело цикла >
Быстрый readLine(), Быстрая печать()
В Swift стандартный ввод невозможен на игровых площадках. Ни в приложении iOS по понятным причинам. Приложение командной строки — это возможный способ чтения входных данных от пользователя. readLine() используется для чтения ввода от пользователя. Он имеет две формы:
- readLine() : способ по умолчанию.
- readLine(strippingNewLine: Bool) : по умолчанию установлено значение true. Swift всегда предполагает, что новая строка не является частью ввода
readLine() Строка по умолчанию. Добавьте следующую строку в файл main.swift .
let str = readLine() //assume you enter your Name print(str) //prints Optional(name)
Чтобы развернуть необязательный элемент, мы можем использовать следующий код:
if let str = readLine()
Чтение Int или Float
Чтобы прочитать ввод как Int или Float, нам нужно преобразовать возвращаемую строку из ввода в один из них.
if let input = readLine() < if let int = Int(input) < print("Entered input is \(int) of the type:\(type(of: int))") >else < print("Entered input is \(input) of the type:\(type(of: input))") >>
Для Float замените инициализатор Int на Float.
Чтение нескольких входов
Следующий код считывает несколько входных данных, а также проверяет, повторяется ли какой-либо из входных данных.
while let input = readLine() < guard input != "quit" else < break >if !inputArray.contains(input) < inputArray.append(input) print("You entered: \(input)") >else < print("Negative. \"\(input)\" already exits") >print() print("Enter a word:") >
Чтение ввода, разделенного пробелами
Следующий код считывает входные данные в виде массива, разделенного пробелами.
let array = readLine()? .split .map (String.init) if let stringArray = array
Функция разделения действует как разделитель пробелов. Он разделяет ввод пробелами и отображает каждый из них как строку. Наконец, они объединяются в виде массива.
Чтение 2D-массива
Следующий код считывает 2D-массив
var arr = [[Int]]() for _ in 0. 4 < var aux = [Int]() readLine()?.split(separator: " ").map(< if let x = Int($0) < aux.append(x) >else < print("Invalid") >>) arr.append(aux) > print(arr)
В приведенном выше коде мы можем создать 4 подмассива внутри массива. Если на каком-либо этапе мы нажмем Enter, ничего не вводя в строку, она будет считаться пустым подмассивом.
Быстрая печать()
Мы часто использовали оператор print() в наших стандартных выводах. На самом деле функция печати выглядит следующим образом: за оператором print(_:separator:terminator:) print() следует разделитель новой строки по умолчанию.
print(1. 5) //// Prints "1. 5" print(1.0, 2.0, 3.0, 4.0, 5.0) //1.0 2.0 3.0 4.0 5.0 print("1","2","3", separator: ":") //1:2:3 for n in 1. 5 < print(n, terminator: "|") >//prints : 1|2|3|4|5|
- терминатор добавляется в конце каждого оператора печати.
- разделитель добавляется между выходными значениями.
Объединение строки со значениями Мы используем \(value_goes_here) для добавления значений внутрь строки.
var value = 10 print("Value is \(value)") // Value is 10
На этом мы заканчиваем этот учебник по стандартному вводу и выводу Swift.
Swift readLine(), Swift print()

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

In this tutorial, we’ll be discussing how to read the standard input in Swift from the user and the different ways to print the output onto the screen. Swift print() is the standard function to display an output onto the screen. Let’s get started by creating a new command line application project in XCode.
Swift Input
- readLine() : The default way.
- readLine(strippingNewLine: Bool) : This is default set to true. Swift always assumes that the newline is not a part of the input
readLine() function always returns an Optional String by default. Add the following line in your main.swift file.
let str = readLine() //assume you enter your Name print(str) //prints Optional(name)
To unwrap the optional we can use the following code:
if let str = readLine()
Reading an Int or a Float
To read the input as an Int or a Float, we need to convert the returned String from the input into one of these.
if let input = readLine() < if let int = Int(input) < print("Entered input is \(int) of the type:\(type(of: int))") >else < print("Entered input is \(input) of the type:\(type(of: input))") >>
For Float, replace Int initialiser with the Float.
Reading Multiple Inputs
The following code reads multiple inputs and also checks if any of the input is repeated.
while let input = readLine() < guard input != "quit" else < break >if !inputArray.contains(input) < inputArray.append(input) print("You entered: \(input)") >else < print("Negative. \"\(input)\" already exits") >print() print("Enter a word:") >
The guard let statement is used to exit the loop when a particular string is entered print() as usual prints the output onto the screen. The current input is checked in the array, if it doesn’t exist it gets added. A sample result of the above code when run on the command line in Xcode is given below.
Reading Input Separated by Spaces
The following code reads the inputs in the form of an array separated by spaces.
let array = readLine()? .split .map (String.init) if let stringArray = array
split function acts as a delimiter for spaces. It divides the input by spaces and maps each of them as a String. Finally they’re joined in the form of an array.
Reading a 2D Array
The following code reads a 2D Array
var arr = [[Int]]() for _ in 0. 4 < var aux = [Int]() readLine()?.split(separator: " ").map(< if let x = Int($0) < aux.append(x) >else < print("Invalid") >>) arr.append(aux) > print(arr)
In the above code we can create 4 sub arrays inside an array. If at any stage we press enter without entering anything in the row, it’ll be treated as a empty subarray.
Swift print()
We’ve often used print() statement in our standard outputs. The print function actually looks like this: print(_:separator:terminator:) print() statement is followed by a default new line terminator by default
print(1. 5) //// Prints "1. 5" print(1.0, 2.0, 3.0, 4.0, 5.0) //1.0 2.0 3.0 4.0 5.0 print("1","2","3", separator: ":") //1:2:3 for n in 1. 5 < print(n, terminator: "|") >//prints : 1|2|3|4|5|
- terminator adds at the end of each print statement.
- separator adds between the output values.
Concatenating string with values We use \(value_goes_here) to add values inside a string.
var value = 10 print("Value is \(value)") // Value is 10
This brings an end to this tutorial on Swift Standard Input and Output.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
10 главных конструкций языка Swift
Чтобы быстро начать программировать на языке, достаточно знать несколько основных конструкций и общих правил написания кода. Со временем вы освоите все нюансы, а на старте можно использовать что-то попроще.
Мы уже писали про Swift — что умеет этот язык и для чего он нужен. Теперь посмотрим, из чего он состоит и как можно быстро вникнуть в код на Свифте.
О чём пойдёт речь
Мы обещали 10 конструкций, но в итоге получилось 12. Простите 🙂
Переменные
В Swift используют две основных команды:
- var — для обозначения переменной;
- let — для того, чтобы задать константу.
Тип данных можно не указывать, язык сам разберётся, что к чему:
var myVar = 42
let myConst = 42
Если нужно указать, что переменная должна иметь дробную часть, то делают так:
var myVar: Double = 40
Обратите внимание — Свифт не требует точки с запятой после каждой команды (и не считает ошибкой, если вы их поставите). Но если вы захотите написать несколько команд на одной строке, то точка с запятой понадобится, чтобы отделить одну команду от другой:
var s = 20; let q = ‘string’
Комментарии
Комментарии оформляются так же, как и в JavaScript — двойным слешем:
// привет, это комментарий
Ввод данных с клавиатуры
Чтобы ввести данные с клавиатуры, применяют команду readLine(). С её помощью можно ввести любые значения в какую угодно переменную, если ей подойдёт то, что мы написали.
// запрашиваем число у пользователя print("Введите число: ") // вводим число с клавиатуры var num = readLine() // теперь в переменной num хранится то, что мы ввели
Вывод данных в терминал
Для стандартного вывода данных можно использовать команду print() или println(). Они отличаются тем, что в первой команде курсор остаётся на той же строке, а во второй курсор после вывода перейдёт на новую строчку.
// После вывода «Привет» курсор останется на этой же строке, сразу после буквы «т» print("Привет") // а после этой команды курсор перейдёт на новую строку println("Это журнал Код") // в итоге у нас получится надпись «ПриветЭто журнал Код»
Присваивание и сравнение
Присваивание обозначается одним знаком равно, а проверка на равенство — двумя:
// это присваивание var s = 2 s = 5 // а это — сравнение s == 1
Ещё есть другие, тоже привычные всем операторы сравнения:
- равно (a == b)
- не равно (a != b)
- больше (a > b)
- меньше (a < b)
- больше или равно (a >= b)
- меньше или равно (a
Команды сравнения чаще всего используются в циклах и условных операторах.
Условный оператор if
Этот условный оператор работает так же, как и в других языках программирования: проверяет значение выражения и если оно истинно, то выполняет что-то одно, а если нет, то может выполнить что-то другое.
// если условие выполняется — выводим сообщение if team > 50 < print("Вы превысили допустимое число команд") // в противном случае увеличиваем групповой счёт на единицу >else
Условные операторы можно вкладывать друг в друга сколько угодно раз, а внутри писать сколько угодно команд. Иногда для упрощения кода используют оператор множественного выбора.
Оператор множественного выбора case
Допустим, мы показали пользователю меню с выбором действий, и теперь ему нужно ввести номер команды из меню. В зависимости от того, что введёт пользователь, мы должны выполнить разные команды. В Swift для этого используют оператор case:
let menu = readLine() switch menu < // если введена единица case 1: visibleComment = "Пользователь добавлен в список" // если пользователь ввёл 2 или 3 case 2, 3: accessLevel = true // если ввёл 4 case 4: print("Не хватает прав доступа") // если ввёл любое другое значение default: print("Такой команды нет в меню") accessCounr += 1 >
Цикл с предусловием for-in
Чтобы работать с циклом, где точно известно число повторений, используют последовательность с нужным числом элементов. Это очень похоже на то, что есть в Python:
// переменная цикла var i = 0; // делаем цикл от 1 до 5, включая 1 и 5 for i in 1. 5 < // выводим текущее значение переменной цикла println(i) >
Ещё вариант — использовать команду where, которая определяет условия выборки из последовательности:
// берём последовательность от 0 до 10 и используем для цикла только те числа, которые делятся на 2 без остатка for i in 0. 10 where i % 2 == 0 < // получается, что на экране будут только чётные числа println(i) >
Циклы с постусловием while и repeat-while
Если мы не знаем, сколько раз будет выполняться наш цикл, но знаем, что пока условие верное, цикл должен работать, — то в этом случае используют цикл while:
// переменная цикла var i = 10 // пока переменная больше ноля — цикл выполняется while i > 0 < // выводим текущее значение переменной print(i) // уменьшаем значение переменной на единицу i -= 1 >
С этим циклом есть один нюанс: если условие сразу не выполняется, то цикл вообще не запустится и то, что написано внутри, тоже ни разу не сработает. Если же нам нужно, чтобы цикл выполнился как минимум один раз, а потом уже запускал все проверки, используют цикл repeat-while. Он как бы переворачивает цикл вверх ногами: сначала команды, а потом проверка:
// переменная цикла var i = 10 // сразу запускаем цикл, на первом шаге без проверки repeat < // выводим текущее значение переменной print(i) // уменьшаем значение переменной на единицу i -= 1 // пока переменная больше ноля — цикл продолжает выполняться >while i > 0
Функции
Как и в большинстве языков программирования, в Swift функция может возвращать какое-то значение, а может и работать сама по себе. Самая простая функция выглядит так:
func hello() print(«Привет, это журнал Код»)
>
Эта функция ничего не возвращает, а при вызове hello() просто выводит на экран нужную фразу.
Если мы хотим передать в функцию какие-то параметры, то их нужно прописать в круглых скобках при объявлении:
func hello(name: String) < print("Привет, \(name) ; , это журнал Код") >// вызываем функцию hello(name: "Миша") // Привет, Миша, это журнал Код
Чтобы функция возвращала какое-то значение, мы должны указать тип этого значения, например, что функция вернёт строку или число:
func hello(name: String) -> String < // возвращаем новую строку с именем внутри return("Привет, \(name) ; , это журнал Код") >// вызываем функцию с помощью команды вывода на экран print(hello(name: "Миша")) // Привет, Миша, это журнал Код
Классы
Классы определяются так, как это принято в ООП — сначала идёт название класса, потом переменные (свойства класса) и функции (методы класса, если они нужны):
// объявляем новый класс class User < // определяем возраст пользователя по умолчанию var age: Int = 18 // переменная для хранения имени пользователя var name: String = "" // метод внутри класса func newUser()< print("Это новый клиент, предложите ему бонусную карту") >>
Объекты
Чтобы создать новый объект на основе класса, берут переменную и присваивают ей значение этого класса. После этого можно работать с любыми свойствами объекта, прописанного в классе, и вызывать любые методы:
// создаём объект класса User // теперь клиент mike — это наш новый объект со всеми свойствами класса var mike: User = User() // задаём возраст клиента mike.age = 22 // и его имя mike.name = "Миша" // выводим имя клиента на экран print(mike.name) // вызываем метод класса mike.new() // на экране появится надпись "Это новый клиент, предложите ему бонусную карту"
Если пока не знаете, зачем нужны классы и объекты, прочитайте наш цикл статей про объектно-ориентированное программирование.
Что ещё
Или оставайтесь у нас, мы будем рассказывать про технологии и программирование на русском 🙂