Struct
Thuộc phần Lập trình hướng đối tượng trong hành trình Swift của Coddy. Bài học 7 trên 57.
Một struct nhóm dữ liệu và phương thức như một lớp (class). Swift tự viết hàm khởi tạo theo thành viên cho mọi struct, với một tham số cho mỗi thuộc tính, vì vậy struct không cần có init riêng:
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())Đầu ra:
3
7Có thể bỏ qua các thuộc tính có giá trị mặc định trong hàm khởi tạo thành viên:
struct Settings {
var volume = 5
var muted = false
}
let quiet = Settings(volume: 1)
print(quiet.volume)
print(quiet.muted)Đầu ra:
1
falseMột cấu trúc được lưu trong hằng số let không thể thay đổi chút nào, kể cả các thuộc tính var của nó. Hãy lưu cấu trúc đó trong var để thay đổi:
let fixed = Point(x: 1, y: 2)
// fixed.x = 5 // lỗi: không thể gán vì fixed là hằng số let
var moving = Point(x: 1, y: 2)
moving.x = 5 // hợp lệNhiều kiểu dữ liệu có sẵn của Swift là cấu trúc: Int, Double, String, Array và Dictionary. Cấu trúc bạn tạo hoạt động giống như các kiểu dữ liệu đó: chúng là những giá trị đơn thuần.
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())Đầu ra:
12.50
3.05Thử thách
DễKhai báo một struct Item với các thuộc tính name (String), price (Int, tính bằng xu) và quantity (Int). Thêm phương thức total() trả về tích của giá và số lượng, cùng phương thức line() trả về 2 x tea = 350.
Code được cung cấp đọc một mặt hàng trên mỗi dòng theo định dạng name,price,quantity, tạo từng Item bằng hàm khởi tạo thành viên và in ra line(). Sau đó, code in ra sum: cùng tổng của tất cả các giá trị tổng.
Code của bạn nằm trong Item.swift. main.swift chứa code đầu vào/đầu ra được cung cấp và không thể chỉnh sửa.
Tự làm thử
// Đoạn code đầu vào/đầu ra đã được cung cấp: giữ nguyên
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)")
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Lớp và đối tượng
Làm việc với tệpĐịnh nghĩa lớpPhương thức và selfHàm khởi tạoLớp là tham chiếuÔn tập: Thẻ thư viện2Struct và kiểu giá trị
StructNgữ nghĩa giá trịPhương thức thay đổiStruct hay classÔn tập: mặt hàng trong kho5Kế thừa
Lớp conGhi đè phương thứcHàm khởi tạo và superfinal và hệ phân cấpÔn tập: hệ phân cấp nhân viên8Các giao thức tiêu chuẩn
CustomStringConvertibleEquatableComparableHashableÔn tập: Sắp xếp tùy chỉnhTự luyện tập: Playground Swift