2016-02-12 11 views
6

मैं यह करने की कोशिश कर रहा हूँ, लेकिन मैं कुछ मुसीबतोंस्विफ्ट जेनरिक स्थगित कर इस मुद्दे को

यह CustomProtocol

protocol CustomProtocol { 

} 

SubCustomProtocol

protocol SubCustomProtocol: CustomProtocol { 

} 

SubCustomProtocolImplementation

class SubCustomProtocolImplementation: SubCustomProtocol { 

} 
है हो रही है

यह CustomClass

class CustomClass<P: CustomProtocol> { 

    var customProtocol: P? 

    func doSomething() { 

    } 

} 

SubCustomClass

class SubCustomClass<P: SubCustomProtocol>: CustomSubClass { 

} 

और मेरे BaseViewController

class BaseViewController<P: CustomProtocol, T: CustomClass<P>>: UIViewController { 

    var foo: T! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     foo?.doSomething() 
    } 
} 

मेरे ViewController

class ViewController<P: SubCustomProtocolImplementation, T: SubCustomClass<P>>: BaseViewController<P,T> { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 

लाइन जहां मैं foo फोन में है? .doSomething() यह कहते हैं कि 'टी' 'CustomClass <' पी '>' के एक उप प्रकार नहीं है और मुझे लगता है मैं क्या कर रहा हूं पता नहीं है गलत

और ViewController घोषणा में यह कहना है कि "BaseViewController की आवश्यकता है कि टी CustomClass से विरासत < 'पी'> "

आशा है कि आप मेरी मदद कर सकते हैं!

+0

मुझे यह त्रुटि नहीं मिल रही है। कम से कम खेल के मैदान में। क्या आप वाकई पूर्ण संदर्भ प्रदान कर रहे हैं? – iyuna

+0

@Iyuna मुझे कुछ खेद है! मैंने प्रश्न –

+1

संपादित किया है ऐसा लगता है, एक सामान्य पैरामीटर द्वारा एक प्रकार पैरामीटर को बाधित नहीं किया जा सकता है। यह _can_ किसी वर्ग या प्रोटोकॉल द्वारा बाध्य होना चाहिए। – CouchDeveloper

उत्तर

2

यदि आप अपने foo var प्रकार को CustomClass<P> के रूप में निर्दिष्ट करना चाहते हैं तो आपको इसके बजाय निम्न कार्य करना चाहिए।

class ViewController<P: CustomProtocol>: UIViewController { 

    var foo: CustomClass<P>? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     foo?.doSomething() 
    } 
} 
+0

धन्यवाद मुझे पता है, मैं इसे बहुत अच्छी तरह से समझा नहीं रहा था, मैंने फिर से अपना प्रश्न संपादित कर लिया है –

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