Chúng không làm điều tương tự, ngược lại chúng có mục đích hoàn toàn khác nhau. Các get
và set
được sử dụng trên các thuộc tính được tính toán. Ví dụ, lấy cấu trúc ví dụ này không có sử dụng thực sự, nhưng là một bản demo tốt.
struct test {
var x = 5
var y = 5
var number: Int {
get {
return x * y
}
set (newValue){
x = newValue/2
y = newValue/2
}
}
}
var s = test()
s.number //25
s.number = 100
s.x //50
s.number //2500
Vì vậy, như bạn có thể thấy, biến number
không phải là một biến theo nghĩa truyền thống, đó là thuộc tính được tính toán. Vì vậy, khi tôi gọi s.number
tôi nhận được sản phẩm của x và y. Ngoài ra, bạn sẽ sử dụng tập hợp này để thay đổi các biến khác (không phải thuộc tính được tính toán) trong cấu trúc. Vì vậy, tôi đặt x
và y
thành các giá trị khác nhau dựa trên newValue
. Ý tưởng về một thuộc tính được tính toán có thể được sử dụng thay cho hàm và tôi thấy rất hữu ích trong việc đơn giản hóa việc truy xuất dữ liệu từ một hàm. Ví dụ, bạn có thể có một cấu trúc mà có một khoảng cách bằng km và bạn có thể muốn rằng trong dặm rất thường xuyên. Vì vậy, bạn có thể tạo ra một tài sản tính miles
hàng dặm mà tính toán số km với phương pháp get
, và thay đổi số km với setter nếu bạn thiết lập dặm đến trong chương trình của bạn.
Bây giờ, cho didSet
và willSet
. Bạn có thể sử dụng các thông báo này để thông báo cho cấu trúc của bạn về thay đổi giá trị. Ví dụ: một averageTracker.
struct averageTracker {
var total: Double = 0 {
didSet {
numEntries++
}
}
var numEntries: Double = 0
var average: Double {
get {
return total/numEntries
}
}
}
var ave = averageTracker()
ave.total += 10
ave.total += 20
ave.average //15
Lưu ý cách thức didSet
thực sự là một biến chứa giá trị, nghĩa là không phải là thuộc tính được tính toán. Ngoài ra, tôi đã sử dụng thuộc tính được tính average
để nhận mức trung bình. Nói chung, tôi hy vọng tôi xóa bỏ sự nhầm lẫn của bạn về khía cạnh rất mạnh mẽ này của Swift.
Nguồn
2015-10-13 01:30:38