iPhoneアプリ開発集中講座の本で分からないところがあります。
タイマーアプリを作成する為に、PickerViewを利用しています。
その中で設定画面起動時に秒数をセットする項目があります。それが以下のコード。
override func viewDidLoad() { super.viewDidLoad() timerSettingPicker.delegate = self timerSettingPicker.dataSource = self let settings = UserDefaults.standard let timerValue = settings.integer(forKey: settingKey) for row in 0..<settingArray.count { if settingArray[row] == timerValue { timerSettingPicker.selectRow(row, inComponent: 0, animated: true) } } }
この中のtimerSettingPicker.dataSource = self の役割がかりません。
timerSettingPicker.dataSource = self のコードを削除しても、問題なく秒数がセットされカウントされました。
このコードはどのような役割をしているのでしょうか。ご教授のほどよろしくお願いします。
ソースコード全文
import UIKit class SettingViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { let settingArray : [Int] = [5,10,20,30,40,50,60] let settingKey = "timer_value" //viewDidLoadメソッドは、SettingViewControllerの起動時に一度だけ実行されるメソッド override func viewDidLoad() { super.viewDidLoad() timerSettingPicker.delegate = self //self→自分自身のインスタンスを指定する意味 timerSettingPicker.dataSource = self let settings = UserDefaults.standard let timerValue = settings.integer(forKey: settingKey) for row in 0..<settingArray.count { if settingArray[row] == timerValue { timerSettingPicker.selectRow(row, inComponent: 0, animated: true) } } } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */ @IBOutlet weak var timerSettingPicker: UIPickerView! @IBAction func decisionButtonAction(_ sender: Any) { //前画面に戻る _ = navigationController?.popViewController(animated: true) } //秒数設定の列数を決定。今回は1列の為、1 func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } //秒数設定の行数を決定。settingArrayから取得する為、settingArrayの配列によって行数が変わる func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return settingArray.count } //UIPickerViewの表示する内容を設定 秒数が全て?になる。 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return String(settingArray[row]) } //picker選択時に実行 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { // UserDefaultsの設定 let settings = UserDefaults.standard //iosアプリ内にデータを保存する方法の一つ settings.setValue(settingArray[row], forKey: settingKey) //選択された秒数を保存している。20秒で設定しても、デフォルトの10秒のまま。 settings.synchronize() //現状不要(メソッドを呼び出さないと保存されない為、必要だった) } }
使用している言語
swift
Xvode 11.4
ご教授のほど、よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/29 23:59
2020/04/30 00:31
2020/04/30 11:30