У меня есть DrinkVolumePickerController.swift
, где я пытаюсь сохранить логику делегата и источника данных, чтобы они не попадали в мой ViewController
import UIKit
class DrinkVolumePickerController: NSObject, UIPickerViewDelegate, UIPickerViewDataSource {
var quantities: [(label: String, ml: Int)] = [("Pint", 568), ("Can", 330)]
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return quantities.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return quantities[row].label + " - " + String(quantities[row].ml)
}
}
В моем ViewController у меня есть
import UIKit
class AddDrinkViewController: UIViewController {
lazy var drinkVolumeControl: UIPickerView! = {
let view = UIPickerView()
view.translatesAutoresizingMaskIntoConstraints = false
let controller = DrinkVolumePickerController()
view.delegate = controller
view.dataSource = controller
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(drinkVolumeControl)
view.setNeedsUpdateConstraints()
}
}
Когда я запускаю это в симуляторе, я не вижу Picker, но я вижу его в DebugViewHeirarchy.
Если я переместлю всю логику обратно в ViewController и изменим delegate
и datasource
на self
, тогда он загружается нормально.
Я просто не понимаю, почему не работает, имея их во внешнем файле?