Như bạn nói, bạn không thể đơn giản xác định lại một hằng số trong một phân lớp (nó là một hằng số, sau khi tất cả). Lỗi bạn nhận được là "Không thể ghi đè bằng thuộc tính được lưu trữ". Dường như có thể ghi đè lên số var
, tuy nhiên, khi tôi thay đổi let someVariable
thành var someVariable
Tôi nhận được "sử dụng mơ hồ" someVariable '"khi tôi truy cập nó trong phân lớp (lưu ý - điều tương tự xảy ra cho dù tôi sử dụng override
hay không) .
Giải pháp đơn giản nhất là sử dụng trình nâng cấp. Đây thực sự là một chức năng, do đó bạn hạnh phúc có thể ghi đè lên nó, biến sự ủng hộ sẽ được quản lý cho bạn, và nếu bạn không cung cấp một setter ... nó sẽ là không đổi cho mỗi lớp:
class BaseView: UIView {
var someVariable: Int { get { return 1 } }
// do some work with someVariable
}
class ExtendedView: BaseView {
override var someVariable: Int { get { return 2 } }
}
let a = BaseView()
a.someVariable // 1
let b = ExtendedView()
b.someVariable // 2
Như commentator @ user3633673 chỉ ra, nếu bạn chỉ có trình khởi động (và không phải là người đặt cược), bạn có thể thả số get
, nhưng tôi đã để nguyên tắc đó rõ ràng. Đây là giống nhau mà không có ...
class BaseView: UIView {
var someVariable: Int { return 1 }
// do some work with someVariable
}
class ExtendedView: BaseView {
override var someVariable: Int { return 2 }
}
let a = BaseView()
a.someVariable // 1
let b = ExtendedView()
b.someVariable // 2
như được viết giống như các biến lớp riêng biệt và không có liên quan, chỉ có cùng tên. –