swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 var texiView:UITextView? 6 var problems:Array<String> = [] 7 var nextB:UIButton? 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 problems.append("こんにちは") 13 problems.append("こんばんは") 14 problems.append("おはようございます") 15 problems.append("おやすみなさい") 16 problems.append("おはようございます") 17 18 let rand = problems.randomElement() 19 if let random = rand{ 20 texiView = setText(contents: random) 21 22 print(random) 23 print(problems) 24 } 25 26 27 nextB = nextButton() 28 } 29 30 func setText(contents:String) -> UITextView{ 31 let question = UITextView() 32 question.isEditable = false 33 question.isSelectable = false 34 question.font = UIFont.systemFont(ofSize: 23) 35 question.textColor = .lightGray 36 question.text = contents 37 question.sizeToFit() 38 question.center = self.view.center 39 self.view.addSubview(question) 40 41 return question 42 } 43 44 45 func nextButton() -> UIButton{ 46 let button1 = UIButton() 47 button1.setTitle("次へ", for: .normal) 48 button1.sizeToFit() 49 button1.setTitleColor(.systemBlue, for: .normal) 50 button1.center = CGPoint(x: self.view.bounds.width / 2, y: self.view.bounds.height * 3 / 4) 51 button1.tag = 1 52 button1.addTarget(self, action: #selector(buttonAction(_:)), for: .touchUpInside) 53 self.view.addSubview(button1) 54 55 return button1 56 } 57 @objc func buttonAction(_ sender:UIButton){ 58 59 texiView?.isHidden = true 60 let rand2 = problems.randomElement() 61 if let random = rand2{ 62 texiView = setText(contents: random) 63 64 let judgment = { 65 (n1:String) -> Bool in return n1 == random 66 } 67 68 let same = problems.firstIndex(where: judgment) 69 70 if let remove = same { 71 problems.remove(at: remove) 72 } 73 74 75 print(random) 76 print(problems) 77 } 78 79 80 if problems.isEmpty { 81 texiView = setText(contents: "終了です!") 82 nextB?.isHidden = true 83 } 84 } 85}
配列problemsに入っている要素から次へというボタンをそしたらランダムで要素を選び表示し、配列自体が空になった終わりというプログラムを組みたいと思っています。randomElement()メソッドを使うと配列からランダムで要素を取ることができるが、配列から取り出し、一回表示したものは配列から消去し、同じ表示にダブらないようにしたいのですが、今のプログラムだと1回目のものが配列から消えず2回目に1回目のものがまた表示される可能性が生じてしまっています。これはどうすれば良いでしょうか?
あなたの回答
tips
プレビュー