https://docs.google.com/presentation/d/1KK9imqtF2px95Vq5KbOT4hGsuJHtaCBFchupoDWeBpE/edit?usp=sharing
http://www.youtube.com/watch?v=MX1x-B427xw
https://docs.google.com/presentation/d/1NuzwitPuU6b2CXJtaDs3FwL-LObQBMw9SxD6yvg8YKc/edit?usp=sharing
http://www.youtube.com/watch?v=wkomwRNBkx0
https://docs.google.com/presentation/d/1Wqa9IIVSYHUcYpkPG4JJQMi3gCIuk-o1NWJKmRLcndc/edit?usp=sharing
https://www.youtube.com/watch?v=5SFjQ0pMv5A
Criada pela Apple Swift é intuitiva, rápida, moderna e fácil de usar, muito mais fácil que Objective-c. Swift foi criada e pensada para desenvolvimento de aplicativos. É segura, e divertida.
Este curso será dividido em 04 módulos cada um com 01 aula e duração de no máximo 1 hora, 1 vez por semana e sem um dia fixo. Você aprenderá os conceitos básicos da linguagem, como variáveis, constantes, funções e etc. Logo após, teremos a segunda parte do curso, onde desenvolveremos um aplicativo OPEN SOURCE que facilitará o aprendizado das crianças com nosso alfabeto. Esperamos que todos possam implementar e compartilhar nosso código, pois a intenção é que o aplicativo seja sempre "OPEN SOURCE" e benefecie a todos.
Para quem já tem alguma experiência em desenvolvimento de software ou que já tenha conhecimento de lógica programação.
De grátis
ONLINE via Youtube.
Para declarar uma variável em Swift usa-se a palavra-chave var. Ela pode ser do tipo implícito ou explícito.
var nome = “José” //String
var sobreNome = “Roberto” //String
var x = 10 //Int
var bandaFavorita = "Black Sabbath"
print("Banda: \(bandaFavorita) ")
var nome: String = “José” //String
var sobreNome: String = “Roberto” //String
var x:Int = 10 //Int
var y:Int = 20 //Int
Em Swift as variáveis e constantes podem ou não ter valor nulo, e decidir quando usá-los.
Para ficar mais claro, veja o exemplo:
var nome: String?//Veja que usamos a interrogação
nome // erro de compilação, pois a variável não foi inicializada
Usa-se a interrogação para informar que sua varável é opcional.
Exemplo:
var nome: String? //Opcional
//Para que não ocorra o erro, sabendo que você assume o risco de estar nulo, usa-se o sinal de exclamação
var nome: String! // A exclamação é usado para forçar seu valor quando você tem certeza que sempre terá algum valor
print(“\(nome)”) // Dará erro, pois sua variável não foi inicializado
var nome: String! // A exclamação é usado para dizer que seu valor estará sempre disponivel, ou que sua variável terá sempre algo a oferecer.
nome = "Cicrano do escambal"
print(“\(nome)”) //Sua variável foi inicializada, logo executa de boa!
var nome: String?
nome = “Fulano”
print(“\(nome!)”) //Executa normalmente, vejam que nesse caso usei a exclamação no momento da impressão, caso contrário não funcionaria
if let dados = nome {//... } else {//...}
var nome: String? //Retorna nil
//Agora quando faço o teste com if, o retorno é nulo pois "nome" não foi inicializada
if let dados = nome {
print(dados)
}
else {
print("nulo")
}
var xy:String = "De boa na Lagoa!" // valor inicializado
var xy:Int = 30 // valor inicializado
Para declarar uma constante em Swift deve-se usar a palavra reservada let e seu valor não pode ser alterado.
let x = "x"
x = "y" // Erro, pois seu valor não pode ser alterado
let cpfDoCliente = 777222555666
print("\(cpfDoCliente)") //Ocorrerá tudo normalmente, pois seu valor não foi alterado
//Uso explicito do tipo da variável
let telemarketing:String = "Atendente surdo"
print("\(telemarketing)") //Ocorrerá tudo normalmente, pois seu valor não foi alterado
Operadores são símbolos e agregam, alteram ou combinam valores, também podem somar, dividir ou subtrair.
//Uso do operador "+" para somar
var c = 120
var z = 120
var result = c + z
print ("\(result)")
//Uso do operador "-" para subtrair
var x = 10
var y = 0
var result = x - y
print ("\(result)")
//Uso do operador "*" para multiplicar
var livrosBonsDeNietzsche = 10 // Muito mais do que isso
var livrosRuinsDeNietzsche = 0
var result = livrosBonsDeNietzsche * livrosRuinsDeNietzsche
print ("\(result)")// resultado em zero
var cuboMagico = 100
var numeroQualquer = 2
var result = cuboMagico / numeroQualquer
print ("\(result)")// resultado em 50
//Uso do sinal de "==" para comparar valores
var macarrao = "macarrão"
var arroz = "arroz"
if macarrao == arroz {
print("Alimentos iguais")
}
else {
print("Alimentos diferentes")
}
//Uso do sinal de "!=" para dizer que não é igual a
var numeroMágico = 9
if numeroMágico != 0 {
print("9")
}
else {
print("Errado, você viajou na maionese")
}
Maior que
var primeiro_numero = 20
var segundo_numero = 10
if primeiro_numero > segundo_numero {
print("Rodou no if... \(primeiro_numero)")
}
else {
print("Rodou no else... \(segundo_numero)")
}
Menor que
//Uso do sinal de "<" para comparar se um número é menor que o outro
var notaDoMercado = 20
if notaDoMercado < 10 {
print("Compras baratas!")
}
else {
print("Compras caras!")
}
Maior ou igual a
####Exemplo:
var x = 220
if x >= 430 {
print("\(x)")
}
else {
print("Errou")
}
Menor igual
Menor ou igual a
var carroDoAno = 200.000
var carroMuitoCaro = "Carro muito carro"
if carroDoAno <= 200.000 {
print("\(carroDoAno)")
}
else {
print("\(carroMuitoCaro)")
}
Significa acréscimo. É quando aumentamos o valor de sua variável. Em Swift utilizamos o operador ++
var a = 10//
++a //Imprime 11, somou + 1 e tem agora o valor de 11
O contrário de incremento. Ocorre quando diminuimos o valor de sua variável. Em Swift utilizamos o operador --
var a = 5
--a // Imprime 4, e diminuiu em 1
Significa avaliar se true ou false, é uma maneira mais eficiente e rápido comparar as variáveis
//Sintaxe:
pergunta? verdadeiro: falso
var seuPaulo = "Chato para cara**o!"
seuPaulo == "Chato para cara**o!" ? "É verdade" : "É mentira"
//O exemplo imprime é verdade
var primeiro_numero = 10
var segundo_numero = 11
primeiro_numero == 11 ? primeiro_numero : segundo_numero
//O exemplo a seguir imprime 11
!, &&, ||
Inverte o boolean, se é "true" retorna "false" e vice-versa
var x = true
if !x {
print (x)
}
else {
print ("false")
}
Operador e
var x = 20
if x > 1 && y > 2 { //Se x e y forem maiores que 1 e 2
print ("Show...")
}
Significa ou
var x = 20
if x > 3 || x < 15 {
print("Ok")
}
Conjunto ou cadeia de carateres que formam texto
var textoDoDia = "Noticia da manhã"
print("\(textoDoDia)") // percebeu o uso do "\(variavel)"... isso é o que chamamos de interpolação de strings, e será visto mais a adiante
//Inserindo com o metódo insert
var hello = "Hello"// Gostaria de acrescentar uma exclamação ao final da palavra
hello.insert("!", atIndex: hello.endIndex) // O resultado é: Hello!
//O metódo insert acrescenta um caracter a palavra
var saudacao = "saudaçãoo"
saudacao.removeAtIndex(saudacao.endIndex.predecessor()) //Remove o último caracter da palavra
print("\(saudacao)") //imprime saudação
var diaRuim = "Dia muito ruim "
var diaPessimo = "ou pior, está péssimo"
var resultado = diaRuim + diaPessimo
print("\(resultado)")
Significa combinar variáveis, constantes ou expressões. Basta inserir as variáveis, constantes ou expressões dentro de "\ ()"
var pais = "Brasil"
var situacao = "país que mais se cobra imposto no mundo!"
print ("País: \(pais), \(situacao)")
//Ou assim
var numero_doze = 12
var numero_setenta = 70
var soma = numero_doze + numero_setenta
print ("\(soma)")
var x:Int = 300
Tanto o float e o double são flutuantes, a diferença é que float para número de 32 bits com precisão de 6 dígitos e double para número de 64 bits com precisão de 15 dígitos
//Float
var x: Float = 300.0123456
print(x) // 300.012
//Double
var y: Double = 300.0123456
print(y) // 300.0123456
//
Possue dois tipos de valores, true ou false
var verdadeiro = true
if verdadeiro {
print("verdadeiro")
}
else {
print("falso")
}
var numeroInteiro = 20
var numeroDouble = 20.00
var soma = numeroInteiro + numeroDouble
print("\(soma)") //Erro, pois numeroInteiro possui número inteiro e ao somar com numeroDouble, o xcode não vai compilar
//Experimente fazer dessa forma
var soma = Double (numeroInteiro) + numeroDouble
print("\(soma)")// roda de boa!
Quando falamos em inferência, dizemos que swift deduz seu tipo, ou seja não é preciso necessariamente declarar seu tipo
var cachorroDaVizinha = “Late pra caramba!” //essa é uma String mas em Swift não precisa necessariamente declarar que é uma string
var cachorroDaVizinha:String = “Late pra caramba!” //essa é uma String e declaramos seu tipo string
Como em outras linguagens de programação, arrays são coleções de índices ordenados
//Criando um array vazio
var arrayVazio = [Int]()
//Acrescentando ao array
var arrayFromHell = [Int]()
arrayFromHell.append(3) //Imprime 3
//Iterando um array com o for in
var arrayFromHell= [20,30,50]
for a in arrayFromHell {
print("\(a)")
}
var arrayVazio = ["Carro","Moto"]
print(" São \(arrayVazio.count) elementos")// O metódo count, contabiliza os elementos que o array contém
//Modificando o array com o metódo append
var array = ["Chocolate", "Pão"]
array.append ("Biscoito")
print(array) //["Chocolate", "Pão", "Biscoito"]
Dicionários, também são coleções e possuem basicamente chave e valor
//Sintaxe
[chave 1: valor 1, chave 2: valor 2]
var arrayFilhoDaMae = ["Rockao": "Jimi Hendrix", "Lanche": "hanburgue"]
print ("\(arrayFilhoDaMae)") //Imprime ["Rockao:" ,"Jimi Hendrix","Lanche: ","hanburgue"]
arrayFilhoDaMae ["Jantar"] = "Feijão"
print ("\(arrayFilhoDaMae)") //Imprime ["Rockao": "Jimi Hendrix", "Jantar": "Feijão", "Lanche": "hanburgue"]
//Exemplo de como mudar o valor de um indice em um dicionário:
arrayFilhoDaMae ["Rockao"] = "The who"
print ("\(arrayFilhoDaMae)") //Imprime ["Rockao": "The who", "Jantar": "Feijão", "Lanche": "hanburgue"]
Responsáveis por repetir um determinado pedaço de código até que uma condição expecifica resulte naquilo que esperamos.
//Perceba que em Swift, o uso do "if" e "else" não exige necessariamente o uso de parênteses
var quantidadeDeCarros = 20
if quantidadeDeCarros > 10 {
// ...
}
else {
//...
}
//Veja novamente que também no laço "for" em Swift não exige necessariamente o uso de parênteses
for var x = 0; x < 3; ++x {
print(x)
}
//Neste exemplo x é multiplicado por 1,2,3,4 e 5
for x in 1...5 {
print("\(x * 5)")
}
// Resultado impresso
5
10
15
20
25
30
var minions = [11,23,44,54,5]
for m in minions {
print(m) //Imprime todos aqueles
}
Executa uma instrução até que a condição seja falsa
var o = 1
while o <= 10 {
print("\(o)")
o += 1
}
Variação de "while", realiza uma única passagem atráves do bloco, em seguida, ele continua a repetir o ciclo até que a condição seja falsa
Em outras linguagens usa-se o "do" no lugar do repeat, nesse caso seria "do while" mas aqui em Swift é "repeat while"
var i = 1
repeat {
print(i)
i = i + 1
} while i < 10
Usado para comparar valores, caso uma das comparações seja verdadeira, o comando é executado
var lacoSwitch = 10
switch lacoSwitch {
case 2:
print("1")
case 5:
print("5")
case 10:
print("10")// Nesse caso é impresso na tela o numero 10
default:
print("10")
}
Parecidos com array. As tuplas também agrupam valores e podem ser de qualquer tipo
//Acessando
var tupla = (3,6)
tupla.0// Imprime 3
//Com o uso de switch
var tuplas = (3,6)
switch tuplas {
case (1,2):
print("1,2")
case (3,6):
print("3,6")
default:
print("3,6")
}
Bloco de código que executa uma tarefa expecífica. Usa a palavra chave func
//Função simples e sem retorno
func executar() {
print("Executando...")
}
executar() // Imprime Executando...
//Função com retorno
func executar() ->String {
return "Executando um projeto do cara**o!..."
}
executar() //Executando um projeto do cara**o!...
Na chamada da função por padrão o nome do primeiro parâmetro é omitido
func calcular(primeiraNota: Int, segundaNota:Int, terceiraNota:Int) ->Int {
return (primeiraNota + segundaNota + terceiraNota) / 3
}
calcular(7, segundaNota:8, terceiraNota: 10) //Imprime 8
Enumerações são listas, lista de possibilidades de valores a serem usados
//Exemplo simples
enum planetas {
case mercurio
case marte
case terra
}
var pl = planetas.marte //imprime marte
enum planetas {
case mercurio
case marte
case terra
}
var planeta = planetas.marte
switch planeta {
case .marte:
print("Marte") //Imprime Marte
case .terra:
print("Terra")
default:
print("Marte")
}
Classe, é a unidade que define o comportamento de seus objetos
class Casa {
}
class Casa {
var porta:String = "porta" //propriedade porta
var janela:String = "janela" //Propriedade janela
//Método interno
internal func construir () {
print("construindo casa...")
}
}
var c = Casa() //Seu objeto
c.construir() //Chamando um método
Quando se herda do seu progenitor. No contexto de programação de computadores, dissemos que o objeto herda caracteristicas de sua classe pai
class Apartamento:Casa {
override func construir() { //Método herdado da classe Casa, a classe pai, veja que usei a palavra chave override reaproveitar o metódo da classe pai
print("construindo apartamento...")
}
}
var ap = Apartamento()// Chamando a classe Apartamento
ap.porta = "Porta para apartamento" // Reusando a propriedade porta
ap.janela = "Janela para apartamento" // Reusando a propriedade porta
ap.construir() // Reusando o método construir
Com ele é possível inicializar nossas propriedades e preparar sua instância para uso
//Declaração simples
init() {
}
class RatoDeEsgosto {
var pata:String
var rabo:String
//Sem parâmetros
init(){
rabo = "Rabo"
}
}
class RatoDeEsgosto {
var pata:String
var rabo:String
//Com parâmetros
init(pata:String,rabo:String){
self.pata = "Pata"
self.rabo = "Rabo"
}
}
Aqueles responsáveis pelo comportamento de seus objetos, propriedades, classes e metódos
Acessado por qualquer classe ou objeto, esse modificador pode ser colocado também na declaração da classe
swift //internal, veja o uso do método internal func utilizar()
class Smartphone {
internal func utilizar () { //Método publico
print ("Usando o smartphone...")
}
}
class Android : Smartphone {
override func utilizar () { //Veja que utilizei a palavra chave override para reaproveitar o método utilizar
print ("Usando o Android...")
}
}
Acessado somente por aquela classe, ou seja, ela fica restrita aquele arquivo de origem, esse modificador pode ser colocado também na declaração da classe
class Smartphone {
private func utilizar () { //Método privado
print ("Usando o smartphone...")
}
}
swift //Erro
//Nesse caso não será possível subscrever o metódo pois o metódo utilizar da classe pai é privado
class Android : Smartphone {
override func utilizar () { //override significa subscrever ao método da classe pai
print ("Usando o Android...")
}
}
Conceito idêntico ao que temos em Java, C#, entre outras linguagens quando se fala em interface. Ou seja, funciona como um acordo onde tenho métodos prontos para serem usados.
protocol Celular {
func random ()-> Double
}
class Android:Celular {
func random() -> Double {
return 1.200
}
}
var ce = Android()
print (ce.random()) //Imprime 1.2
Struct não possui suporte a herança, é passada por valor e não por referência como ocorre em uma classe.
struct SovertedoMes {
var agosto:Int = 30
var setembro:Int = 0
}
A variável sm_2 não recebe de sm_1 um novo valor e permanece com seu antigo
var sm_1 = SovertedoMes()
var sm_2 = sm_1 //Atribuimos c1 para c2
sm_1.agosto = 40
print(sm_1.agosto) //40
print(sm_2.agosto) //30
Experimente mudar a declaração de struct para class
class SovertedoMes {
var agosto:Int = 30
var setembro:Int = 0
}
Nesta situação a variável sm_2 recebe e imprime um novo valor pois recebe como referência o valor de sm_1
var sm_1 = SovertedoMes()
var sm_2 = sm_1
sm_1.agosto = 40
print(sm_1.agosto) //40
print(sm_2.agosto) //40
Adicionam novas funcionalidades a classes, enumerações, estruturas ou tipo de protocolo existente.
//Extendendo o "struct Int"
extension Int {
var n: Int {return self * 10} //N recebe 10
}
var resultadoDionizico = 10.n //Aqui eu digo que 10 foi multiplicado por 10, já que n recebe 10
Uma forma de descobrir a origem do tipo, ou checar uma instância, por exemplo. Usa-se os operadores "is" ou "as".
Checa o tipo da instância, ou retorna true se o que esperamos é verdadeiro ou false caso contrário.
var x: (11,22)
x is Int // Pergunto ao x se ele é do tipo inteiro
//O retorno é true
var x: (11,22)
x is String // Pergunto ao x se ele é do tipo String, o que não é
//O retorno é false
Utilizado para indicar o tipo que não estar explicito. Podendo ser usado de duas formas: Utilizado com o operador !, você força o "casting" e desempacota o objeto, ou utilizando o operador ? que retornará nulo caso você não tenho êxito. Eu sei que vocês não esqueceram do que aprendemos lá trás sobre opcionais.
var cafe = "Café forte"
cafe as! String // Roda de boa!
var xicaras = 22
xicaras as? Int //Roda de boa tb
// Experimente fazer o que fiz abaixo
var xicaras:Int!
xicaras as? Int //Nem roda porque xicaras está vazio, nulo, quando uso o sinal de ? estou dizendo que é opcional e assumindo o risco de me retornar nulo
O aplicativo nasceu para ser open source e tem o propósito de facilitar o entendimento das crianças do nosso alfabeto. Esse mesmo estará disponivel no github. O app deve ser de fácil entendimento. Tem que ser baseado em exercicios básicos, aqueles ensinados nas escolas para crianças de 4 anos. Ainda não temos o nome para o aplicativo. Precisamos de ideias para o aplicativo, por isso criei esse repositório repositório para que todos coloquem suas ideias e sugestões.