Depois de muita tentativa e erro
//Desafio 1
class Emprego {
var nome: String
var salario: Double
init(nome: String, salario: Double) {
self.nome = nome
self.salario = salario
}
}
class Gerente: Emprego {
var departamento: String
init(departamento: String, nome: String, salario: Double) {
self.departamento = departamento
super.init(nome: nome, salario: salario)
}
}
let emprego = Emprego(nome: "Desenvolvedor", salario: 5350.00)
print("Emprego: \(emprego.nome), Salário: \(emprego.salario)")
let gerente = Gerente(departamento: "TI", nome: "Gabriel", salario: 7000.0)
print("Gerente: \(gerente.nome), Salário: \(gerente.salario), Departamento: \(gerente.departamento)")
//Desafio 2
class Vendedor: Emprego {
var percentualComissao: Double
init(nome: String, salario: Double, percentualComissao: Double = 0.10) {
self.percentualComissao = percentualComissao
super.init(nome: nome, salario: salario)
}
func calculaSalario(numeroDeVendas: Int) -> Double {
let valorPorVenda = 50.0
let comissaoPorVenda = valorPorVenda * percentualComissao
let totalComissao = comissaoPorVenda * Double(numeroDeVendas)
return salario + totalComissao
}
}
let vendedor = Vendedor(nome: "Carlos", salario: 3000.0)
let salarioFinal = vendedor.calculaSalario(numeroDeVendas: 20)
print("Vendedor: \(vendedor.nome), Salário Base: \(vendedor.salario), Salário Final: \(salarioFinal)")
// Desafio 3
func verificaTipo(empregado: Emprego) {
if let gerente = empregado as? Gerente {
print("O(a) empregado(a) \(gerente.nome) é um(a) gerente e está no departamento \(gerente.departamento).")
}else if let vendedor = empregado as? Vendedor {
print("O(a) empregado(a) \(vendedor.nome) é um(a) vendedor.")
}else {
print("O(a) empregado(a) \(empregado.nome) é um(a) empregado(a) comum.")
}
}
let empregado1 = Emprego(nome: "Carlos", salario: 3000.0)
let gerente1 = Gerente(departamento: "RH", nome: "Felipe", salario: 5000.0)
let vendedor1 = Vendedor(nome: "Daniel", salario: 2000.0)
verificaTipo(empregado: empregado1)
verificaTipo(empregado: gerente1)
verificaTipo(empregado: vendedor1)