2015-01-13 13 views
5

में तर्क को अनदेखा करें मैं प्रोटोकॉल के फ़ंक्शन को कैसे सेट कर सकता हूं ताकि यह वैकल्पिक तर्क प्राप्त कर सके या इसे अनदेखा कर सके? मेंस्विफ्ट डिफ़ॉल्ट तर्क और प्रोटोकॉल विधि/फ़ंक्शन

सभी की
//Goal: Default forRound should be 0 if none provided 
class OnlineGame : Game { 
    func modeName(forRound: Int = 0) -> ModeName { 
     //Some code 
    } 
} 

//Goal: I don't care about the forRound value here 
class OfflineGame : Game { 
    func modeName(_ forRound: Int) -> ModeName { 
     //Some code 
    } 
} 

उत्तर

0

सबसे पहले, आप की घोषणा कर रहे हैं "विधि", और the first parameter of "method" has no external name by default:

protocol Game { 
    func modeName(forRound: Int) -> ModeName 
} 
इन 2 विशेष वर्गों के साथ

:

मैं इस प्रोटोकॉल की है।

class SomeGame: Game { 
    func modeName(forRound: Int) -> ModeName { 
     // ... 
    } 
} 

let game: Game = SomeGame() 
let modeName = game.modeName(1) // not `game.modeName(forRound: 1)` 

अपने OnlineGame मामले में, if the parameter has default value, it has external name automatically भले ही वह विधि के पहले पैरामीटर है: तो यहाँ बहुत सामान्य मामले कोड है। आप _ के रूप में स्पष्ट बाहरी नाम साथ कि व्यवहार को ओवरराइड कर सकते हैं:

class OfflineGame : Game { 
    func modeName(_: Int) -> ModeName { 
     //Some code 
    } 
} 
+0

अपने जवाब के लिए धन्यवाद:

class OnlineGame : Game { func modeName(_ forRound: Int = 0) -> ModeName { //Some code } } 

अपने OfflineGame मामले में, आप के साथ _के रूप में आंतरिक नाम पैरामीटर अनदेखा कर सकते हैं। मुझे अभी भी 'ऑनलाइन गेम' के साथ कोई समस्या है, मैं पैरामीटर के बिना 'game.modeName()' को कॉल नहीं कर सकता अगर मैं ऑनलाइन गेम क्लास में लिखा गया कार्य सेट करता हूं: 'func modeName (_ forRound: Int = 0) -> मोडनाम ' – Kalzem

+0

अच्छा। यह मेरे लिए काम किया। कुछ समय पहले मेरी पहली कोशिश पर मैंने स्पष्ट रूप से कुछ गलती की थी। धन्यवाद! –

+0

@BabyAzerty आप 'game' चर कैसे घोषित करते हैं? यदि वह 'खेल दें: गेम = ऑनलाइन गेम()', आप सीधे '.modeName()' पर कॉल नहीं कर सकते हैं, क्योंकि संकलक को यह नहीं पता कि यह 'ऑनलाइन गेम' वर्ग का उदाहरण है। – rintaro

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