2016-03-29 12 views
7

Tôi đã nghĩ đến hai loại triển khai; mà một trong số họ là tốt hơn trong ý kiến ​​của bạn về hiệu suất, khả năng đọc và bảo trì?Cách tốt nhất để giới thiệu một UIColor tùy chỉnh cho một dự án Swift là gì?

  1. Tạo một phần mở rộng của UIColor như thế này

    extension UIColor { 
        class func myColor() -> UIColor { 
         return UIColor(red: 128/255, green: 102/255, blue: 0, alpha: 1) 
        } 
    } 
    
  2. Tạo một cấu trúc:

    struct Colors { 
        static let myColor = UIColor(red: 255/255, green: 102/255, blue: 0, alpha: 1) 
    } 
    
+4

Xác định "tốt hơn" ... – Moritz

+0

tôi ** ** giống như thứ 2 :) – onmyway133

+0

Các cách đầu tiên rõ ràng, khách quan, tốt hơn. : D –

Trả lời

13

Trả lời: mở rộng, theo ý kiến ​​chuyên môn của tôi.

Hãy nghĩ về điều đó; bạn đang, trong triết học, 'mở rộng' phạm vi màu sắc được cung cấp bởi UIColor. Miễn là tên màu của bạn là khác biệt và chức năng mới tuân theo giao thức đặt tên phương thức của Apple (tức là <color name>Color), việc mở rộng UIColor có vẻ gọn gàng hơn. Một hoặc hai màu mới (theo ý kiến ​​của tôi) không đảm bảo toàn bộ struct chuyên dụng.


Bonus câu trả lời: đâu sẽ một struct (! Hoặc enum) là phù hợp nhất?

  • Nếu lực lượng ứng dụng của bạn thay thế cho màu sắc chuẩn (tức là tùy chỉnh màu sắc 'chính')
  • Nếu ứng dụng của bạn được thiết kế đặc biệt để được theo chủ đề/tùy chỉnh, nó có thể là tốt có một enum, để phục vụ như một danh sách cụ thể cho các tùy chọn có sẵn.
  • Nếu bạn không thể nghĩ tên chuẩn cho màu sắc (sharkBlueColor, bất kỳ ai?).
  • Nếu ứng dụng của bạn đặc biệt để vẽ/sơn (trong trường hợp đó, cấu trúc 'bảng' có thể là ý tưởng hay).

... danh sách tiếp tục. Bạn phải học cách phân biệt và tự quyết định khi trưởng thành với tư cách là nhà phát triển Swift!

+1

đồng ý, nó giúp việc khám phá dễ dàng hơn nhiều trừ khi bạn có lý do để ẩn nó đi - ví dụ: một loạt các bộ màu với một danh sách đầy đủ các màu sắc - trong trường hợp đó có lẽ là một enum là cách để đi – sketchyTech

1

tôi sử dụng enums cho điều này

enum AppColor: UInt32 { 

    case DarkBlue = 0x00437C 
    case LightBlue = 0x7CCEF0 

    var color: UIColor { 
     return UIColor(hex: rawValue) 
    } 

} 

Bằng cách này nó rất dễ dàng để tái sử dụng cùng một màu sắc trong xib/storyboard bởi vì tôi có giá trị hex sẵn sàng cho copy/paste. Và cũng ít mã cần thiết để xác định màu sắc mới

Để tạo màu sắc từ giá trị hex tôi đã sử dụng phần mở rộng UIColor:

extension UIColor { 

    public convenience init(hex: UInt32) { 
     let mask = 0x000000FF 

     let r = Int(hex >> 16) & mask 
     let g = Int(hex >> 8) & mask 
     let b = Int(hex) & mask 

     let red = CGFloat(r)/255 
     let green = CGFloat(g)/255 
     let blue = CGFloat(b)/255 

     self.init(red:red, green:green, blue:blue, alpha:1) 
    } 

} 
+1

'UIColor (hex: rawValue)'? https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIColor_Class/ –

Các vấn đề liên quan