Skip to content

Instantly share code, notes, and snippets.

@mateuspestana
Created July 11, 2022 19:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mateuspestana/f40e0e04af304b1bda7b1497ad3eab75 to your computer and use it in GitHub Desktop.
Save mateuspestana/f40e0e04af304b1bda7b1497ad3eab75 to your computer and use it in GitHub Desktop.
/*
Agora eu sei comentar da forma correta!
LOOPS
*/
let platforms = ["iOS", "macOS", "tvOS", "watchOS", "CarPlay"]
for os in platforms {
print("Swift é ótimo para \(os)")
}
// O loop no Swift é bastante simples, quando se trata de um array.
for i in 1...12 {
print("5 x \(i) é \(5*i)")
}
// Aqui o bicho pega. se eu digito 1...12 seria o mesmo que no R fazer 1:12, ou seq(1, 12, 1). Isso inclui o 1 e o 12.
for i in 1...12 {
print("A tabuada do \(i):")
for j in 1...12 {
print(" \(j) x \(i) é \(j*i)")
}
print()
}
// Aqui temos dois loops aninhados. Coloquei o print() no final para ele pular uma linha e ficar melhor no console, conforme explicitado pelo HwS.
// E se eu quisesse um range de todos os números, menos o último?
for i in 1..<5 { print(i) }
// E se eu não quiser usar nem i nem j ou qualquer nome? Uso _
var lyric = "Piririm"
for _ in 1...3 {
lyric += " pom"
}
print(lyric)
// Assim, podemos escrever:
let agentes: [String] = ["Matheus", "Gabriela", "Weslley", "Paula", "Eric", "Marília"]
for _ in agentes {
print("[CENSURADO] é um agente secreto!")
}
// Podemos printar assim também, mas é arriscado pois não sabemos o tamanho:
print(agentes[0...3])
// O menos arriscado:
print(agentes[0...])
// Assim, ele vai até o último elemento possível.
/*
WHILE
*/
// O while é menos usado que o for:
var countdown = 10
while countdown > 0 {
print("\(countdown)")
countdown -= 1
}
print("Ground control to Major Tom...")
// O While é útil QUANDO VOCÊ NAO SABE QUANTAS VEZES O LOOP VAI RODAR.
let id = Int.random(in: 1...1000)
print(id)
// O .random(in:), que funciona em int e double, escolhe um número aleatoriamente.
var roll = 0 // variável para guardar o valor do dado
while roll != 20 {
roll = Int.random(in: 1...20)
print("Joguei o dado e deu \(roll)")
}
print("CONSEGUI!")
// Em resumo, usamos o for geralmente quando temos sentenças finitas: contando de 1 a 10, itens em um array, etc. Contudo, usamos o while quando temos uma condição arbitrária até ela dar "false". Assim usamos um while até o usuário dizer pra parar, o servidor pedir pra parar, encontrarmos uma resposta ou termos gerado dados o suficiente.
/*
BREAK & CONTINUE
*/
// Continue: pula o item corrente
// break: pula todas as outras iterações seguintes
let filenames: Array<String> = ["me.jpg", "work.txt", "getulio.jpg", "logo.psd"]
for filename in filenames {
if !filename.hasSuffix(".jpg") {
continue
}
print("Foto encontrada: \(filename)")
}
// Ou seja, o continue pula a iteração quando ela é falsa, e vai para a próxima. Sendo falsa (sendo que já é falsa), ela sai e printa que encontrou a foto.
let number1 = 4
let number2 = 14
var multiples = Array<Int>()
for i in 1...100_000 {
if i.isMultiple(of: number1) && i.isMultiple(of: number2) {
multiples.append(i)
if multiples.count == 10 {
break
}
}
}
print(multiples)
// Quando temos dados os suficientes (no caso acima, 10), ele "quebra" e termina, ignorando os próximos valores.
/*
CHECKPOINT 3
Fazer um loop de 1 a 100, e sempre que um número for:
- multiplo de 3, printar "Fizz"
- múltiplo de 5, printar "Buzz"
- múltiplo de 3 e 5, printar "FizzBuzz"
- se não for nenhum dos casos acima, printar o número.
*/
for number in 1...100 {
if number.isMultiple(of: 3) && number.isMultiple(of: 5) {
print("FizzBuzz")
} else if number.isMultiple(of: 3){
print("Fizz")
}else if number.isMultiple(of: 5){
print("Buzz")
} else {
print(number)
}
}
// Pelo switch case:
for number in 1...100 {
switch (number.isMultiple(of: 3), number.isMultiple(of: 5)) {
case (true, false):
print("Fizz!")
case (false, true):
print("Buzz!")
case(true, true):
print("FizzBuzz!")
default:
print(number)
}
}
// Reparar que criei uma tupla pra resolver. Eu poderia fazer number % 3 == 0, mas .isMultiple(of:) é melhor.
// Poderia resolver também fazendo uma função para o FizzBuz
func fizzbuzz(numero: Int) -> String {
switch (numero.isMultiple(of: 3), numero.isMultiple(of: 5)) {
case (true, true):
return "FizzBuzz"
case (true, false):
return "Fizz"
case (false, true):
return "Buzz"
default:
return "Nem assumido, nem desassumido, apenas \(numero)"
}
}
print(fizzbuzz(numero: 998))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment