Struktury
Część sekcji Programowanie obiektowe ścieżki Swift w Coddy. Lekcja 7 z 57.
struct grupuje dane i metody, podobnie jak klasa. Swift tworzy inicjalizator składowy dla każdej struktury, z jednym parametrem na każdą właściwość, dlatego struktura nie potrzebuje własnego 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())Wynik:
3
7Właściwości z wartościami domyślnymi można pominąć w inicjalizatorze składowym:
struct Settings {
var volume = 5
var muted = false
}
let quiet = Settings(volume: 1)
print(quiet.volume)
print(quiet.muted)Wynik:
1
falseStruktura przechowywana w stałej let nie może się zmienić, nawet jej właściwości var. Aby ją zmienić, przechowuj ją w var:
let fixed = Point(x: 1, y: 2)
// fixed.x = 5 // błąd: nie można przypisać wartości, fixed jest stałą let
var moving = Point(x: 1, y: 2)
moving.x = 5 // poprawnieWiele typów języka Swift to struktury: Int, Double, String, Array i Dictionary. Twoje struktury zachowują się tak samo jak te typy: są zwykłymi wartościami.
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())Wynik:
12.50
3.05Wyzwanie
ŁatwyZadeklaruj strukturę Item z właściwościami name (String), price (Int, w centach) i quantity (Int). Dodaj metodę total(), która zwraca iloczyn ceny i ilości, oraz metodę line(), która zwraca 2 x tea = 350.
Podany kod odczytuje jeden element w każdym wierszu w formacie name,price,quantity, tworzy każdy element Item za pomocą inicjalizatora składowego i wyświetla line(). Następnie wyświetla sum: oraz sumę wszystkich wartości zwracanych przez metody total.
Umieść swój kod w pliku Item.swift. Plik main.swift zawiera podany kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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)")
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasMetody i selfInicjalizatoryKlasy są referencjamiPowtórzenie — karta biblioteczna4Hermetyzacja
Kontrola dostępuTylko do odczytu z zewnątrzOchrona stanuInicjalizatory, które mogą zawieśćPodsumowanie — konto bankowe7Polimorfizm i typy generyczne
PolimorfizmRzutowanie typówFunkcje generyczneTypy generycznePodsumowanie – kalkulator kształtów2Struktury i typy wartościowe
StrukturySemantyka wartościMetody modyfikująceStruktura czy klasaPodsumowanie – element inwentarza5Dziedziczenie
PodklasyPrzesłanianie metodInicjalizatory i superfinal i hierarchiePodsumowanie — hierarchia pracowników8Standardowe protokoły
CustomStringConvertibleEquatableComparableHashablePodsumowanie — własne sortowanie11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Swift