2015-01-01 3 views
7
convenience init(red:Int,green:Int,blue:Int,alpha:CGFloat) { 
    var red: CGFloat = CGFloat(red)/255.0 
    var green: CGFloat = CGFloat(green)/255.0 
    var blue: CGFloat = CGFloat(blue)/255.0 
    self.init(red:red, green:green, blue:blue, alpha:alpha) 
} 

मैंने अपना कस्टम यूकोलर घोषित करने का एक और सुविधाजनक तरीका देने के लिए उपरोक्त कोड लिखा था। लेकिन किसी भी तरह, यह स्टैक ओवरफ्लो तक खुद को कॉल करके मेरे ऐप को दुर्घटनाग्रस्त कर देता है। यहाँ क्या गलत है?UIColor एक्सटेंशन सुविधा काम नहीं कर रहा है

इसके अलावा, मुझे अभी एहसास हुआ कि मैं स्पष्ट रूप से इस init फ़ंक्शन को कॉल नहीं कर रहा हूं। लेकिन जब यह त्रुटि होती है तो मैं UIColor.whiteColor() पर कॉल कर रहा था। बेशक, अगर मैं स्पष्ट रूप से इस फ़ंक्शन को कॉल करता हूं, तो त्रुटि अभी भी होती है!

उत्तर

14

मैं किसी भी असुविधा के सिर्फ इस तरह यह कर नहीं दिख रहा है:

let myCustomColorHSBa = UIColor(hue: 120/360, saturation: 0.25 , brightness: 1.0 , alpha: 1) 
let myCustomColorRGBa = UIColor(red: 191/255, green: 1, blue: 191/255, alpha: 1) 

लेकिन अगर आप वास्तव में एक की जरूरत है, आप के रूप में पालन कर सकते हैं:

extension UIColor { 
    convenience init(red: Int = 0, green: Int = 0, blue: Int = 0, opacity: Int = 255) { 
     precondition(0...255 ~= red && 
        0...255 ~= green && 
        0...255 ~= blue && 
        0...255 ~= opacity, "input range is out of range 0...255") 
     self.init(red: CGFloat(red)/255, green: CGFloat(green)/255, blue: CGFloat(blue)/255, alpha: CGFloat(opacity)/255) 
    } 
} 

UIColor(red: 255)    // r 1.0 g 0.0 b 0.0 a 1.0 (Red) 
UIColor(red: 255, green: 255) // r 1.0 g 1.0 b 0.0 a 1.0 (Yellow) 
UIColor(red: 255, blue: 255) // r 1.0 g 0.0 b 1.0 a 1.0 (Magenta) 

UIColor(green: 255)    // r 0.0 g 1.0 b 0.0 a 1.0 (Green) 
UIColor(green: 255, blue: 255) // r 0.0 g 1.0 b 1.0 a 1.0 (Cyan) 

UIColor(blue: 255)    // r 0.0 g 0.0 b 1.0 a 1.0 (Blue) 
UIColor(red: 255, green: 192, blue: 203) // r 1.0 g 0.753 b 0.796 a 1.0 (Pink) 
UIColor(red: 255, green: 215) // r 1.0 g 0.843 b 0.0 a 1.0 (Gold) 
+2

यहां चाल है कि सुविधा init में UIColor init के लिए अलग-अलग नाम पैरामीटर होना चाहिए। –

+0

थोड़ा सा प्रयास करने के बाद, मुझे लगता है कि रॉबर्ट वाग्स्टाफ ने सही स्पष्टीकरण दिया था। मुझे नहीं लगता कि स्विफ्ट विभिन्न प्रकार के समान पैरामीटरों को ओवरलोड करने की अनुमति देता है। आश्चर्य है कि अगर यह जानबूझकर किया गया है या भविष्य में इसे – donkey

+0

में अनुमति दी जाएगी, तो मैं आपको अपने बहुत से प्रश्नों पर अच्छे उत्तर की उम्मीद कर रहा था अगर यह आपको परेशान करता है। – donkey

2

एक और तरीका यह ऐसा करना होगा (स्विफ्ट 3)

extension UIColor { 

    convenience init(r: CGFloat, g: CGFloat, b: CGFloat, a:CGFloat) { 
     self.init(red: r/255, green: g/255, blue: b/255, alpha: a/255) 
    } 
} 

let myColor = UIColor(r:255, g:255, b:255, a:255) 
संबंधित मुद्दे