Structs
Parte da seção Programação Orientada a Objetos do Journey de Swift da Coddy. Lição 7 de 57.
Uma struct agrupa dados e métodos, como uma classe. O Swift escreve um inicializador membro a membro para cada struct, com um parâmetro por propriedade, portanto uma struct não precisa de seu próprio init:
struct Point {
var x: Int
var y: Int
func distanceFromOrigin() -> Int {
abs(x) + abs(y)
}
}
let p = Point(x: 3, y: -4)
print(p.x)
print(p.distanceFromOrigin())Saída:
3
7Propriedades com valores padrão podem ser omitidas do inicializador membro a membro:
struct Settings {
var volume = 5
var muted = false
}
let quiet = Settings(volume: 1)
print(quiet.volume)
print(quiet.muted)Saída:
1
falseUma struct armazenada em uma constante let não pode ser alterada de forma alguma, nem mesmo suas propriedades var. Armazene-a em uma var para poder alterá-la:
let fixed = Point(x: 1, y: 2)
// fixed.x = 5 // erro: não é possível atribuir, fixed é uma constante let
var moving = Point(x: 1, y: 2)
moving.x = 5 // okMuitos dos próprios tipos do Swift são structs: Int, Double, String, Array e Dictionary. Suas structs se comportam da mesma forma que esses tipos: são valores simples.
struct Money {
var cents: Int
func formatted() -> String {
"\(cents / 100).\(cents % 100 < 10 ? "0" : "")\(cents % 100)"
}
}
print(Money(cents: 1250).formatted())
print(Money(cents: 305).formatted())Saída:
12.50
3.05Desafio
FácilDeclare uma struct Item com as propriedades name (String), price (Int, em centavos) e quantity (Int). Adicione um método total() que retorne o preço multiplicado pela quantidade e um método line() que retorne 2 x tea = 350.
O código fornecido lê um item por linha no formato name,price,quantity, cria cada Item com o inicializador membro a membro e imprime line(). Em seguida, imprime sum: e a soma de todos os totais.
Seu código deve estar em Item.swift. main.swift contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
// Código de entrada/saída fornecido: mantenha-o como está
var input: [String] = []
while let line = readLine() { input.append(line) }
var sum = 0
for row in input {
let p = row.split(separator: ",").map(String.init)
let item = Item(name: p[0], price: Int(p[1])!, quantity: Int(p[2])!)
print(item.line())
sum += item.total()
}
print("sum: \(sum)")
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesMétodos e selfInicializadoresClasses são ReferênciasRevisão - Cartão da Biblioteca4Encapsulamento
Controle de AcessoSomente Leitura ExternaProtegendo o EstadoInicializadores que Podem FalharRevisão - Conta Bancária7Polimorfismo e Genéricos
PolimorfismoConversão de TiposFunções GenéricasTipos GenéricosRevisão - Calculadora de Formas2Structs e Tipos de Valor
StructsSemântica de ValorMétodos MutáveisStruct ou ClasseRecapitulação - Item de Inventário5Herança
SubclassesSobrescrita de métodosInicializadores e superfinal e hierarquiasRecapitulação - Hierarquia de funcionários8Protocolos Padrão
CustomStringConvertibleEquatableComparableHashableRecapitulação - Ordenação Personalizada11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Playground de Swift