2016-03-31 8 views
17

क्या मैं विरासत की आवश्यकता के बिना विस्तार के साथ स्विफ्ट में इसे कार्यान्वित कर सकता हूं? मैं यह त्रुटि एक्सटेंशन मिल संग्रहित गुणएक्सटेंशन में संग्रहीत गुण नहीं हो सकते

extension UIButton 
{ 
    @IBInspectable var borderWidth : CGFloat 
     { 
     didSet{ 
      layer.borderWidth = borderWidth 
     } 
    } 

} 

उत्तर

32

आप सेटर/गेटर ओवरराइड कर सकते हैं इतना है कि यह एक संग्रहीत संपत्ति नहीं है और सिर्फ आगे सेट/परत पर जाओ।

extension UIButton { 
    @IBInspectable var borderWidth : CGFloat { 
     set { 
      layer.borderWidth = newValue 
     } 

     get { 
      return layer.borderWidth 
     } 
    } 
} 
+1

यह तकनीकी काम करता है लेकिन यह xib/storyboard में यूआई को अद्यतन नहीं करता है। –

+0

सेटिंग के बाद 'setNeedsLayout() 'करें। –

7

एक्सटेंशन शामिल संग्रहीत गुण नहीं जोड़ सकते हैं न खाते हों। docs (परिकलित गुण अनुभाग) से:

नोट

एक्सटेंशन नई गणना गुण जोड़ सकते हैं, लेकिन वे संग्रहीत नहीं जोड़ सकते गुण, या मौजूदा संपत्तियों के लिए संपत्ति पर्यवेक्षकों जोड़ें।

आप संग्रहीत संपत्तियों के लिए एक की जरूरत है, तो आप एक उपवर्ग, इसलिए की तरह बनाना चाहिए:

class CustomButton : UIButton 
{ 
    @IBInspectable var borderWidth : CGFloat 
     { 
     didSet{ 
      layer.borderWidth = borderWidth 
     } 
    } 

} 
+0

मैं वैरिएबल को स्टोर नहीं करना चाहता हूं, मैं इंटरफ़ेस बिल्डर –

+0

से layer.borderWidth को बदलना चाहता हूं, डैन का उत्तर आपके लिए काम कर सकता है, हालांकि मेरी चिंता यह है कि 'UIButton' को गेटर/सेटर से पहले पूरी तरह से प्रारंभ नहीं किया जा सकता है सक्रिय किया गया। – Alexander

1

स्विफ्ट में, मैं उद्देश्य-सी में लिखी गई स्थिर पुस्तकालय आयात कर रहा हूं। नीचे दिए गए प्रोटोकॉल, उस पुस्तकालय में, एक विधि और एक संपत्ति है।

@class Message; 

@protocol LocalService 

@property (readonly) int action; 

- (Message *)getResponse:(Message *)request; 

@end 

एक वर्ग है कि प्रोटोकॉल के अनुरूप करने के लिए कोशिश कर रहा है, नीचे दिए गए संदेशों बचाता है:)

1- 'ShowInitialViewLocalService' टाइप करें प्रोटोकॉल के अनुरूप नहीं है 'LocalService

2) एक्सटेंशन हो सकता है संग्रहीत गुण

नीचे दिया गया कोड, इस समस्या को हल करता है:

import UIKit 

class ShowInitialViewLocalService: NSObject{ 

} 

extension ShowInitialViewLocalService : LocalService { 

    var action: Int32 { 
     get { return View.InitialView.rawValue } 
    } 

    func getResponse(_ request: Message) -> Message { 
     let response = Response(source: request.target, target: request.source, relatedView: View.InitialView.rawValue, action: request.action, data: request.data) 
     return response 
    } 
} 

मुझे आशा है कि इससे किसी की मदद मिलेगी।

संबंधित मुद्दे