मुझे वास्तव में पता नहीं है कि उत्तरों को कैसे फेरबदल किया जाए। मेरे पास बटन (बटन ए, बटनबी, बटनसी) और विभिन्न उत्तरों का मिलान है

   let answer = [
       ["30","20","10"],
       ["cat", "dog", "butterfly"],
       ["flower", "sun", "tree"]
   ]

  for i in 0..<buttons.count{
            answer[i].shuffled(using: &RandomNumberGenerator)
            buttons[i].setTitle(self.answer[self.numberOfQuestion][i], for: .normal) //this row is ok
        }

यह उत्तर मुझे प्रत्येक बटन में डालना चाहिए, लेकिन उसी स्थिति में नहीं। सही उत्तर हमेशा पहले स्थान पर होता है, इसलिए इस क्षण में बटन A में प्रत्येक सही उत्तर होता है।

त्रुटि 1: 'RandomNumberGenerator.Protocol' टाइप करें 'RandomNumberGenerator' के अनुरूप नहीं हो सकता है; केवल संरचना/एनम/वर्ग प्रकार प्रोटोकॉल के अनुरूप हो सकते हैं

त्रुटि 2: 'RandomNumberGenerator.Protocol' प्रकार के अपरिवर्तनीय मान को इनआउट तर्क के रूप में पारित नहीं कर सकता

मैंने पहले कभी फेरबदल का इस्तेमाल नहीं किया है। इस आदिम प्रश्न के लिए क्षमा करें, लेकिन मैं तेजी से भिखारी हूं। धन्यवाद

0
Anket. 11 अप्रैल 2020, 01:00

2 जवाब

सबसे बढ़िया उत्तर

RandomNumberGenerator एक प्रोटोकॉल है, लेकिन आप इसका उपयोग, शाब्दिक रूप से, एक पैरामीटर के रूप में नहीं करेंगे, बल्कि उस प्रोटोकॉल के अनुरूप एक ऑब्जेक्ट की आपूर्ति कर सकते हैं।

लेकिन आपको वास्तव में इसके बारे में चिंता करने की ज़रूरत नहीं है। यादृच्छिक संख्या जनरेटर की आपूर्ति के बिना, सीधे shuffled (या randomElement) का उपयोग करें। यदि आप इन तीन उपसरणियों में से प्रत्येक को फेरबदल करने का प्रयास कर रहे हैं, तो आप यह कर सकते हैं:

let answers = [
    ["30","20","10"],
    ["cat", "dog", "butterfly"],
    ["flower", "sun", "tree"]
].map { $0.shuffled() }

इससे चीजें मिलेंगी जैसे:

[
    ["20", "10", "30"], 
    ["dog", "cat", "butterfly"], 
    ["tree", "sun", "flower"]
]

तब आप इस तरह की चीजें कर सकते थे:

for (index, button) in buttons.enumerated() {
    button.setTitle(answers[numberOfQuestion][index], for: .normal)
}

ध्यान दें, हमने बटनों के अपने लूप में पहुंचने से पहले फेरबदल को स्थानांतरित कर दिया है, क्योंकि इससे यह सुनिश्चित होगा कि उत्तर दोहराया नहीं जाएगा। लेकिन अगर आप उत्तरों को दोहराने की अनुमति देना चाहते हैं, तो हो सकता है कि आप बिल्कुल भी फेरबदल न करें, लेकिन बस एक यादृच्छिक तत्व लें:

let answers = [
    ["30", "20", "10"],
    ["cat", "dog", "butterfly"],
    ["flower", "sun", "tree"]
]

for button in buttons {
    button.setTitle(answers[numberOfQuestion].randomElement(), for: .normal)
}
3
Rob 11 अप्रैल 2020, 22:52
let buttons = [UIButton(), UIButton(), UIButton()]
let answers = [
     ["30","20","10"],
     ["cat", "dog", "butterfly"],
     ["flower", "sun", "tree"]
 ]

let shuffledAnswers = answers.map { $0.shuffled() }

buttons.enumerated().forEach {
    let answer = shuffledAnswers[$0.offset].first
    $0.element.setTitle(answer, for: .normal)
}
2
Onvil 11 अप्रैल 2020, 01:26