2014-06-23 10 views
14

से एक ऑब्जेक्टिव-सी वर्ग विधि का उपयोग कैसे मेरी स्विफ्ट एप्लिकेशन में, मैं से नीचे के रूप में weibo() नामक एक वर्ग विधि का उपयोग करने की जरूरत है ऑब्जेक्टिव-सीस्विफ्ट भाषा

@interface Weibo : NSObject 
+ (Weibo*)weibo; 
@end 

मैं ब्रिजिंग हैडर विन्यस्त और कोशिश की है निम्नलिखित कथन

let w = Weibo.weibo() as Weibo 

यह काम नहीं करता है।

अद्यतन: मैंने फोर्क किया है और नीचे इस मुद्दे को ठीक किया है।

let w = Weibo.getWeibo() as Weibo // the method has been changed. 

कारण है कि इसकी वजह स्विफ्ट एक सुविधा की निर्माता के रूप में व्यवहार करता है + (Weibo*)weibo; काम नहीं किया। चूंकि weibo कक्षा का नाम Weibo जैसा है, हालांकि मामला अलग है। स्विफ्ट का समर्थन करने के लिए इस समस्या को ठीक करने के लिए मुझे नाम को getWeibo पर बदलने की आवश्यकता है।

इस उत्तर में योगदान देने वाले प्रत्येक के लिए धन्यवाद। @Anil और @ दाऊद

को विशेष धन्यवाद

जेक

+3

यह एक वर्ग विधि है जो संपत्ति नहीं है। यानी 'Weibo.weibo() ' – Fogmeister

उत्तर

18

+ (Weibo*)weibo; आपकी कक्षा Weibo का क्लास तरीका है। आप की तरह

let w:Weibo = Weibo.weibo() 

तेज में इसे का उपयोग कर सकता है लेकिन यह मुझे त्रुटि जब मैं करने की कोशिश की ('weibo' is unavailable: use object construction 'Weibo()') देता है क्योंकि विधि नाम और वर्ग के नाम एक ही हैं की हो सकता है। जब मैं बदल विधि नाम त्रुटि चला जाता है

let w:Weibo = Weibo.getWeibo() // works: method name changed 
+3

यह इस बात पर निर्भर करता है कि विधि क्या करती है। स्विफ्ट कंपाइलर इसे एक सुविधाजनक कन्स्ट्रक्टर के रूप में पेश कर रहा है, यही कारण है कि आपको त्रुटि संदेश मिलता है। यदि ऐसा है, तो आपको बस 'w w = Weibo() 'का उपयोग करना चाहिए। अगर, जैसा कि मुझे संदेह है, यह एक सिंगलटन विधि है, तो आपको विधि के नाम को उस चीज में बदलना होगा जो सुविधा कन्स्ट्रक्टर की तरह नहीं दिखता है। –

+0

आपकी मदद के लिए धन्यवाद, मैंने रेपो को फोर्क किया है और इसे ठीक कर दिया है। –

+0

@ डेविड, सुविधा कन्स्ट्रक्टर को इंगित करने के लिए धन्यवाद। मैंने इसे पहले डब्ल्यूडब्ल्यूडीसी वीडियो में देखा था। एक बार फिर धन्यवाद। –

4

एक वर्ग विधि नहीं एक संपत्ति है यही कारण है कि।

तो तुम इसे पसंद का उपयोग होगा ...

let w = Weibo.weibo() 

... मुझे लगता है।

प्रकार निष्कर्ष निकाला जाएगा, लेकिन आप के रूप में यह कर सकता है ...

let w:Weibo = Weibo.weibo() as Weibo 

मुझे विश्वास है, और यह अभी भी काम करेगा।

+0

नीचे वोट के लिए कोई विशेष कारण? – Fogmeister

1

मैं परिवर्तन कोड द्वारा एक ही समस्या है

+(instancetype _Nonnull)manager; 

आप इस

@property(nonatomic, class, strong, readonly) CKKNetManager *_Nonnull manager; 

है जैसे कि यह बदलना चाहिए की तरह तो आप स्विफ्ट में कॉल कर सकते हैं यह

CKKNetManager.manager.get(kGetCompanyInfo, success: {[unowned self] (obj) in 

     self.hideEmptyView() 
     self.info = CKKCorpInfo.init(dictionary: obj as! [String : AnyObject]) 
    }) {[unowned self] (errorString) in 

     self.showEmptyView(in: self.view, with: EmptyViewType.pageLoadFailed) 
    } 
+0

या इस कोड का नाम बदलें + (instancetype _Nonnull) साझा प्रबंधक; ' तो फोन' कोड CKKNetManager.shared() मिल (kGetCompanyInfo, सफलता:। {[बिना स्वामित्व वाले स्वयं] (obj) self.hideEmptyView में() self.info = CKKCorpInfo.init (शब्दकोश: के रूप में obj [स्ट्रिंग : AnyObject]) }) 0 [ self.showEmptyView (में: self.view, with: emptyViewType.pageLoadFailed) } '{12 अप्रत्याशित स्वयं] (त्रुटि स्ट्रिंग) – songxing10000

0

यदि किसी के पास पहले की तरह ही समस्याएं हैं, तो कारण है कि मैं फ़ंक्शन को त्वरित से एक्सेस नहीं कर सका क्योंकि यह .h (हेडर) फ़ाइल में फ़ंक्शन घोषणा को याद कर रहा था। तो यह केवल .m फ़ाइल में था और मेरी स्विफ्ट फ़ाइल से उपलब्ध नहीं था।

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