Generic Protocols Swift
Trước khi giới thiệu về Generic Protocol, mình tóm tắt và review 1 chút về Generic và protocol trong Swift Generic được dùng khi muốn viết 1 hàm, biến , class hay params ... 1 cách tổng quát nhất. 1 trong nhưng cách tạo Generic trong swift như sau: struct GenericStruct<T> { var ...
Trước khi giới thiệu về Generic Protocol, mình tóm tắt và review 1 chút về Generic và protocol trong Swift
Generic được dùng khi muốn viết 1 hàm, biến , class hay params ... 1 cách tổng quát nhất. 1 trong nhưng cách tạo Generic trong swift như sau:
struct GenericStruct<T> { var property: T? }
<T> có thể được định nghĩa 1 cách rõ ràng hoặc để cho Swift infer dựa trên giá trị truyền vào. Ví dụ:
let explictStruct = GenericStruct<Bool>() // T là Bool, được định nghĩa 1 cách rõ ràng let implicitStruct = GenericStruct(property: "String") // T là String, được infer từ "String"
Tạo 1 protocol đơn giản.
protocol NormalProtocol { var property: String { get set } }
Class hay Struct comfort protocol này phải implement property như 1 string, và Type của property ko thể thay đổi đc.
class NormalClass: NormalProtocol { var property: String = "String 1" }
Vấn đề đặt ra là, làm sao property của Class hay Struct comfort protocol có thể đc generic như sử dụng Generic phía trên.Nghĩa là property có thể là Int, Bool hay là String. Để làm đc cái đó chung ta sẽ tìm hiểu về Protocol Associated Types
Để có thể generic property trong Protocol như Generic thì chúng ta tạo 1 kiểu giống như <T> như sau:
protocol GenericProtocol { associatedtype T var genericProperty: T { get set } }
Giống như Generic bình thường, Class hay Struct comfort GenericProtocol có thể tự định nghĩa type của T hoặc để swift tự động infer
class GenericClass: GenericProtocol { typealias T = Int // T là Int var genericProperty = 1 } class GenericClass: GenericProtocol { var genericProperty = "String" // T tự hiểu là String }