Tôi muốn tạo danh mục của lớp nhanh hiện có của mình, nhưng không có tùy chọn nào trong IDE để làm như vậy.
Bất kỳ ý tưởng nếu danh mục tồn tại trong dự án nhanh chóng? Hoặc làm thế nào để đạt được chức năng tương tự trong dự án nhanh?
Câu trả lời:
Trong Swift, bạn có thể sử dụng Extensions
để thêm chức năng mới vào các lớp, cấu trúc và kiểu liệt kê hiện có.
Chúng khác với danh mục Objective-C ở một số điểm, chủ yếu là:
Như ngày nay, Tiện ích mở rộng có thể:
Cú pháp cơ bản để khai báo một phần mở rộng như sau:
extension SomeType {
// new functionality to add to SomeType goes here
}
Kiểm tra tài liệu của Apple để biết thêm thông tin về cách sử dụng Tiện ích mở rộng trong Swift.
Trong Objective C, chúng được gọi là danh mục , nhưng trong Swift chúng được gọi là phần mở rộng . Mục đích của cả hai là cung cấp chức năng bổ sung cho các lớp hiện có mà không cần phải tạo các lớp con.
Tôi đã đọc về các tiện ích mở rộng trong tài liệu, nhưng tôi không thực sự hiểu cách sử dụng một tiện ích mở rộng trong dự án của mình cho đến khi tôi xem video hướng dẫn này ( phiên bản YouTube , nguồn github ).
Đây là một bản tóm tắt được trích từ video về cách thực hiện.
Nhấp chuột phải vào Project Navigator và chọn "New File ..."
Chọn "Tệp Swift"
Quy ước là lưu tên tệp dưới dạng tên lớp bạn đang mở rộng cộng (với dấu "+") những gì bạn đang làm với nó. Ví dụ: "UIImage + Cropping".
Mở tệp Swift mới mà bạn vừa tạo.
Bạn nên nhập UIKit
(thay vì Foundation
) nếu bạn đang mở rộng a UIView
. Sau đó sử dụng extension
từ khóa trước tên lớp mà bạn muốn mở rộng. Sau đó, bạn có thể thêm các phương thức mới của riêng mình vào lớp. (Lưu ý, phần mở rộng là để thêm các phương thức mới, không ghi đè các phương thức hiện có - do đó có tên.)
Trong video, ví dụ là thêm một phương pháp cắt một vòng tròn từ hình ảnh và tạo đường viền cho nó.
import UIKit
extension UIImage {
func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage {
// code to create the cropped circle with colored border
return newImage
}
}
Xem ví dụ đầy đủ ở đây .
Bây giờ bạn có thể sử dụng phương thức mới của mình cho lớp đó ở bất kỳ đâu trong mã của bạn, giống như nó là một phần của lớp chuẩn.
Đây là ví dụ của video ( trên github ):
import UIKit
class ViewController: UIViewController {
@IBOutlet var imageView : UIImageView = nil
override func viewDidLoad() {
super.viewDidLoad()
let img = imageView.image
imageView.image = img.cropToCircleWithBorderColor(UIColor(red:0.91, green:0.34, blue:0.16, alpha:1.00), lineWidth: 20)
}
}
Phương pháp cropToCircleWithBorderColor
này không phải là một phần tiêu chuẩn của nó UIImage
, nhưng như bạn có thể thấy, nó được sử dụng giống như trước đây.
Trong Swift, nó được gọi là Phần mở rộng ! Kiểm tra nó ra
extension
không thể bao gồm các biến, điều đó làm cho mọi thứ hoàn toàn khác.
Bạn có thể sử dụng mã sau trong lớp hiện có của mình
extension name{
func funcName(){
}
}
extension
.