Tôi đang cố gắng để đánh dấu một biến của một kiểu generic như yếu:chế generic Class-chỉ trong Swift
class X<T> {
weak var t: T?
}
Nếu tôi không đưa vào bất kỳ trở ngại cho T
tôi nhận được lỗi weak cannot be applied to non-class type 'T'
.
Nếu tôi sẽ chỉ sử dụng sử dụng này với các lớp NSObject nguồn gốc này sẽ làm việc:
class X<T: NSObject> {
weak var t: T?
}
Nhưng tôi cũng muốn để có thể sử dụng các lớp Swift tinh khiết.
Đối với các giao thức có thể yêu cầu các implementor là loại lớp bằng công class
keyword:
protocol ClassType: class {
}
Với giao thức ClassType
bây giờ tôi có thể đánh dấu các biến như yếu:
class X<T: ClassType> {
weak var t: T?
}
Nhưng tôi không thể thêm từ khóa class
trực tiếp vào thông số chung:
class X<T: class> { // Compile error
weak var t: T?
}
tôi có thể làm công việc giải pháp giao thức cho mọi tầng lớp NSObject xuất phát với một phần mở rộng:
extension NSObject: ClassType {
}
Nhưng đối với lớp Swift tinh khiết không có lớp cha phổ biến mà tôi có thể thêm phần mở rộng này để. Có cách nào để thực hiện công việc này mà không cần thêm giao thức ClassType
vào mỗi lớp tôi muốn sử dụng lớp X
không? Ví dụ. một số vòng loại đặc biệt cho tham số chung như class X<T:ThisIsAClass>
?