2014-09-15 21 views
6

स्विफ्ट, आदेश is या as? downcasting आप @objc विशेषता के साथ प्रोटोकॉल चिह्नित करना होगा साथ प्रोटोकॉल अनुरूपता की जाँच करने में। एक बार जब आप उस गुण के साथ एक प्रोटोकॉल निशान ऐसा लगता है कि आप एक संपत्ति के रूप में एक enum के साथ एक प्रोटोकॉल नहीं हो सकता क्योंकि enums ऑब्जेक्टिव-सी में नहीं दर्शाया जा सकता।चेक प्रोटोकॉल अनुरूपता जब प्रोटोकॉल स्विफ्ट में एक enum शामिल?

enum Language:String { 
    case English = "English" 
    case Spanish = "Spanish" 
    case German = "German" 
} 

@objc protocol Humanizable { 
    var language:Language { get set } 
} 

आपको एक त्रुटि मिल जाएगा: http://swiftstub.com/475659213/

उदाहरण में अगर आप बदलना LanguageString लिए तो यह ठीक काम करता है: error: property cannot be marked @objc because its type cannot be represented in Objective-C

यहाँ पूर्ण उदाहरण है।

+0

swiftstub.com लिंक के लिए धन्यवाद, बहुत उपयोगी! एक दिलचस्प समस्या भी। – ColGraff

+0

@Graff कोई जांच नहीं। कम से कम आप इसे आज़मा सकते हैं और जिस समस्या का सामना कर रहे हैं उसे देख सकते हैं। – Johnston

+0

हाँ, मैं इसे देखता हूं। मैं थोड़ा सा मूर्खतापूर्ण लेकिन अभी तक कुछ भी नहीं आया है। उम्मीद है कि वहाँ एक अच्छा जवाब वहाँ बाहर है, सबसे मैं enum के स्थान पर एक इंट या स्ट्रिंग उपयोग कर रहा था के साथ आ सकता है। – ColGraff

उत्तर

0

यह एक जवाब नहीं है, लेकिन मैं अपने 'तेज ठूंठ' में एक संकलन त्रुटि का पता था, इस प्रकार Human परिभाषित किया जाना चाहिए:

class Human:Humanizable { 
    var name:String = "Frank" 
    var language:Language = .English 
} 

आप एक स्ट्रिंग शाब्दिक से एक enum उदाहरण बनाने के लिए कोशिश कर रहे थे ।

मैं एक छोटे से हैरान हूँ कि प्रोटोकॉल अनुरूपता जाँच @obj की आवश्यकता है हूँ - कि सिर्फ बदसूरत है!

+0

याहू यह अजीब है: " आप केवल प्रोटोकॉल अनुरूपता की जांच कर सकते हैं यदि आपका प्रोटोकॉल @objc विशेषता "सीधे आईबुक से चिह्नित है। – Johnston

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