Chỉ còn một vài ngày nữa thôi là Swift sẽ kỷ niệm 2 năm ra đời, kể từ ngày được công bố tại hội nghị WWDC 2014 của Apple. Tại công ty chúng tôi thì tất cả mọi người đều đã chuyển sang dùng Swift, và không ai có ý định thay đổi. Tuy nhiên, trong suốt 2 năm vừa qua thì tôi vẫn còn đang cố gắng tìm hiểu điều gì khiến Swift trở nên hấp dẫn như vậy. Với người tiền nhiệm Objective-C, chúng ta đã có 3 thập kỷ.
Vì vậy, trong bài viết này, tối sẽ cố gắng chắt lọc những điều mà khiến tôi thấy Swift mạnh mẽ và cuốn hút như vậy. Tất nhiên mọi thứ chỉ là trên quan điểm cá nhân, và tôi cũng không phải một chuyên gia hay cái gì đó cao siêu cả. Do vậy, nếu bạn có đóng góp gì, cứ tự nhiên comment và góp ý cho tôi.
Tránh những lỗi Stringly-Typed coding với Enums
Đã không biết bao nhiêu lần tôi phải đập đầu vào tường chỉ vì đi mày mò những bugs chính tả từ một vài chuỗi String trong project của tôi. Bên cạnh việc tiết kiệt thời gian khi sử dụng Enums thì công cụ hoàn thiện code trong Xcode cũng sẽ gợi ý các enum values cho bạn
Đây là một ví dụ về Enum mà tôi hay khai báo mỗi khi dùng NSURLSession:
enum HTTPMethod: String {
case GET = "GET"
case POST = "POST"
case PUT = "PUT"
case DELETE = "DELETE"
}
Hoặc chúng ta cũng có thể viết ngắn gọn hơn như sau:
enum HTTPMethod: String { case GET, POST, PUT, DELETE }
Tăng cường tính bảo mật với Access Control keywords
Đặt tình huống nếu bạn đang viết một API mà có thể phơi bày ra hết cho những lập trình viên khác, những người thậm chí còn không biết những input và output bạn đang cho họ xem là gì, thì bạn sẽ hiểu được sự quan trọng của việc định nghĩa một API xúc tích và rõ ràng.
Thêm những từ khóa Access Control vào trong những API methods sẽ giúp người dùng giản lược hóa những gì họ nhận được, đồng thời họ sẽ chỉ thấy được những gì họ cần. Bạn có thể viết hàng trang document để giải thích những methods nào nên dùng hay không, vậy tại sao không thêm một vài từ khóa đơn giản để đảm bảo cho những thứ đó?
Về cơ bản thì khái niệm Access Control không còn là điều gì quá mới mẻ. chúng ta đã từ thấy “public” interface trong file .h và “private” trong file .m của Objective-C rồi. Do đó, sử dụng các từ khóa Access Control sẽ giúp bạn nâng cao tính đóng gói, tối ưu hóa code cũng như một phần nào đó, performance của bạn tốt hơn.
Kiểu Generics
Generics là một trong những tính năng mạnh mẽ nhất của Swift.Array và Dictionary là cả hai tập hợp của generic. Bạn có thể tạo một mảng chứa các giá trị Int, hoặc một mảng chứa các giá trị String, hoặc thực sự là một mảng cho bất kỳ kiểu nào khác có thể được tạo ra trong Swift.
Kể từ khi Swift ra đời thì tôi thường dựng các Views và View Controller trên code. Tôi thường khởi tạo các views mà không có các argument (init:frame là một designated initializer). Trong Swift, nếu bạn định nghĩa một hàm khởi tạo mà không có argument cho bất kỳ một class UIKit nào thì bạn bắt buộc phải khai báo thêm một hàm khởi tạo init:code, điều này khá là rườm rà. Do đó, để giảm những đoạn code rườm ra hay tính lặp lại của code, thì các View của tôi sẽ kế thừa từ một “Generic View Class” thay vì UIView
public class GenericView: UIView {
public required init() {
super.init(frame: CGRect.zero)
configureView()
}
public required init?(coder: NSCoder) {
super.init(coder: coder)
configureView()
}
internal func configureView() {}
}
Ở class trên thì tôi đã đặt hết những phương thức như thêm subViews, căn chỉnh Constraints hay căn màu, font chữ ..vv. vào trong một function là “configureView” và mỗi lần muốn khởi tạo một View mới, tôi chỉ việc gọi function “configureView” ra.
class AwesomeView: GenericView {
override func configureView() {
....
}
}
let awesomeView = AwesomeView()
Kiểu thiết kế trên sẽ trở nên mạnh mẽ hơn khi chúng ta kết hợp với kiểu Generic
public class GenericViewController<View: GenericView>: UIViewController {
internal var contentView: View {
return view as! View
}
public init() {
super.init(nibName: nil, bundle: nil)
}
public required init?(coder: NSCoder)
super.init(coder: coder)
}
public override func loadView() {
view = View()
}
}
Và bây giờ thì việc tạo một View Controller mới sẽ càng trở nên đơn giản hơn:
class AwesomeViewController: GenericViewController<AwesomeView> {
override func viewDidLoad()
super.viewDidLoad()
....
}
}
Qua ví dụ trên thì chúng ta càng thấy được sự mạnh mẽ cũng như gọn gàng của Swift, kiểu Generic giúp chúng ta tránh được việc phải khai báo một cách lặp đi lặp lại những khối lệnh giống nhau , code trở nên sáng sủa và dễ quản lý hơn.
Đến đây thì tôi cũng xin phép được kết thúc phần 1, hãy thử áp dụng những điều trên vào project của mình và cho tôi biết ý kiến của bạn.
Hẹn gặp lại các bạn vào phần 2 !
Bài gốc: http://https://medium.com/@ksmandersen/good-swift-bad-swift-part-1-f58f71da3575#.m018vwe9u
Techmaster là trung tâm đào tạo lập trình di động từ năm 2011. Chủ trương không cấp bằng, nhưng đào tạo cẩn thận, tỷ mỷ, phương pháp sáng tạo, làm dự án thật, đảm bảo việc làm cho học viên tốt nghiệp.
Lập trình ứng dụng Android thương mại
Lập trình ứng dụng iOS Objective-C
Khóa học iOS Swift 2.x
Bình luận