Tôi đã thực hiện một số nghiên cứu về lý do chúng tôi nên sử dụng Nhận và Đặt cho các thuộc tính của chúng tôi.Getters and Setters in Swift - Thay vào đó bạn có sử dụng WillSet và DidSet không?
tôi đã nhận thấy 3 lý do chính cho nó
- Khi bạn muốn làm/kiểm tra một cái gì đó trước khi bạn thực sự thiết lập các tài sản
- Khi bạn muốn có một tài sản mà bạn chỉ có thể Get from nó (có thể vì mục đích bảo mật tôi đoán?), hoặc cung cấp cho nó truy cập khác nhau cấp độ.
- Ẩn đại diện nội bộ của thuộc tính trong khi phơi bày thuộc tính bằng cách sử dụng đại diện thay thế. (Mà đối với tôi không làm cho rất nhiều ý nghĩa kể từ khi tôi có thể truy cập nó trên sai chỗ sử dụng các chức năng Cài đặt anyways)
Đoạn code dưới đây là một ví dụ về cách bạn sẽ thực hiện Get và Set cho tài sản trong Swift, lợi dụng những 3 điểm tôi đã đề cập:
class Test
{
private var _testSet:String!
private var _testGetOnly:String
var testSet:String{
get{
return _testSet
}
set{
_testSet = newValue + "you forgot this string"
}
}
var testGetOnly:String!{
get{
return _testGetOnly
}
}
init(testSet:String, testGetOnly:String)
{
_testSet = testSet
_testGetOnly = testGetOnly
}
}
nhưng ví dụ này khác dưới đây cũng tận dụng những điểm được đề cập nhưng thay vì sử dụng một tài sản tính toán để trả lại giá trị tài sản cá nhân tôi chỉ sử dụng các willSet và người theo dõi didSet
class Test
{
var testGet:String {
willSet{
fatalError("Operation not allowed")
}
}
var testWillSet:String!{
didSet{
self.testWillSet = self.testWillSet + "you forgot this string"
}
}
init(testGet:String, testWillSet:String)
{
self.testGet = testGet
self.testWillSet = testWillSet
}
}
Vì vậy, tôi rất tò mò muốn biết các ƯU ĐIỂM và DISADVANTAGES của từng triển khai là gì.
Cảm ơn trước
Câu hỏi rất thú vị, nhưng tôi thực sự không thể giúp bạn vì đám đông đã được phát hiện. .. –
willSet và didSet là ** quan sát **. Chúng hoàn toàn khác với getters/setters. (Thậm chí không đề cập rằng các thuộc tính thường trong Swift (chẳng hạn như trong một phần mở rộng giao thức) thậm chí không phải là các thuộc tính, chúng là các thuộc tính được tính toán.) Trong câu trả lời cho câu hỏi của bạn, vâng, bằng mọi cách, hai quan sát là các tính năng ngôn ngữ tuyệt vời , điều đó, rất thường xuyên bạn đồng bằng ** không phải bận tâm ** về việc sử dụng mẫu tài sản/getter/setter tẻ nhạt nữa - tuyệt vời. – Fattie