2014-06-23 19 views
6

Tôi đã thêm phần mở rộng vào UIColor cho một số màu mà tôi sử dụng trong suốt ứng dụng của mình. Dưới đây là một ví dụ:Mở rộng Swift Không hoạt động

extension UIColor { 
    func appLightGrayColor() -> UIColor { 
    return UIColor(red: 190.0/255.0, green: 190.0/255.0, blue: 190.0/255.0, alpha: 1.0) 
    } 

    func grayScaleColor(grayScale : CGFloat) -> UIColor { 
    return UIColor(red: grayScale/255.0, green: grayScale/255.0, blue: grayScale/255.0, alpha: 1.0) 
    } 
} 

Tuy nhiên, khi tôi cố gắng gọi nó, con đường duy nhất mà tôi đã có thể biên dịch mà không có lỗi là thế này:

UINavigationBar.appearance().barTintColor = UIColor.appLightGrayColor(UIColor())() 

Dưới đây là những gì tôi nhận được với autocomplete:

enter image description here

Tôi đang làm gì sai?

Trả lời

2

Trong khi câu trả lời Bryan là vẫn đúng, với việc phát hành Swift 3, ưa thích "Swifty" cách làm những việc đã thay đổi bit.

Với Swift 3, UIColors được xác định trước được sử dụng cho phù hợp:

var myColor: UIColor = .white // or .clear or whatever 

Do đó, nếu bạn muốn một cái gì đó tương tự, chẳng hạn như sau ...

var myColor: UIColor = .myCustomColor 

... sau đó, bạn sẽ xác định tiện ích mở rộng như vậy:

extension UIColor 
    { 
    public class var myCustomColor: UIColor 
     { 
     return UIColor(red: 248/255, green: 248/255, blue: 248/255, alpha: 1.0) 
     } 
    } 

Thực tế, Apple xác định màu trắng là:

public class var white: UIColor 
+0

Nói về cách "Swifty" để làm việc ... Không nên mở niềng răng trên cùng một dòng với tuyên bố? :) –

+0

Đừng bắt đầu làm điều đó! Nó sẽ chỉ trở thành một cuộc chiến tôn giáo. :-) –

+0

https://en.wikipedia.org/wiki/Indent_style#Whitesmiths_style –

18

Bạn đã thêm phương pháp dụ, nhưng những gì bạn thực sự muốn là class method

extension UIColor { 
    class func appLightGrayColor() -> UIColor { 
    return UIColor(red: 190.0/255.0, green: 190.0/255.0, blue: 190.0/255.0, alpha: 1.0) 
    } 

    class func grayScaleColor(grayScale : CGFloat) -> UIColor { 
    return UIColor(red: grayScale/255.0, green: grayScale/255.0, blue: grayScale/255.0, alpha: 1.0) 
    } 
} 
+3

+1, ngoài ra, tôi đề nghị 'appLightGrayColor() -> UIColor {return UIColor.grayScaleColor (190.0)}' – Abizern

+0

Ồ, wow. Duh. Cảm ơn!! –

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