Как передать значение переменной из UIPickerView в ViewController?

Передача значения переменной из UIPickerView в ViewController в языке программирования Swift может быть выполнена с помощью делегата или замыкания (closure). В следующих строках я расскажу о двух способах реализации этой задачи: с использованием делегата и с использованием замыкания.

1. Использование делегата:

Шаг 1: Создайте протокол, который будет служить делегатом для UIPickerView. Протокол будет содержать один метод, который будет вызываться при выборе определенного значения в UIPickerView. Назовем его, например, PickerDelegate.

protocol PickerDelegate: class {
    func didSelectValue(_ value: String)
}

Шаг 2: В классе ViewController, где у вас есть UIPickerView, добавьте свойство делегата:

class ViewController: UIViewController {
    weak var delegate: PickerDelegate?
    // ...
}

Шаг 3: В классе ViewController, где у вас есть UIPickerView, найдите метод pickerView(_:didSelectRow:inComponent:) делегата UIPickerViewDelegate и в нем вызовите метод делегата:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    let selectedValue = // получите значение, выбранное в UIPickerView
    delegate?.didSelectValue(selectedValue)
}

Шаг 4: Теперь в том месте, где вы создаете экземпляр класса ViewController (например, в другом классе или в самом ViewController), установите себя в качестве делегата:

let viewController = ViewController()
viewController.delegate = self

Шаг 5: В том месте, где у вас есть экземпляр ViewController и вы хотите получить значение выбранного значения в UIPickerView, реализуйте метод протокола PickerDelegate:

extension YourClass: PickerDelegate {
    func didSelectValue(_ value: String) {
        // здесь вы можете использовать значение выбранного значения из UIPickerView
    }
}

2. Использование замыкания (closure):

Шаг 1: В классе, где у вас есть UIPickerView, добавьте свойство замыкания:

class ViewController: UIViewController {
    var didSelectValue: ((String) -> Void)?
    // ...
}

Шаг 2: В классе ViewController, где у вас есть UIPickerView, найдите метод pickerView(_:didSelectRow:inComponent:) делегата UIPickerViewDelegate и в нем вызовите замыкание:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    let selectedValue = // получите значение, выбранное в UIPickerView
    didSelectValue?(selectedValue)
}

Шаг 3: Теперь в том месте, где вы создаете экземпляр класса ViewController (например, в другом классе или в самом ViewController), передайте замыкание:

let viewController = ViewController()
viewController.didSelectValue = { value in
    // здесь вы можете использовать значение выбранного значения из UIPickerView
}

Теперь вы знаете, как передать значение переменной из UIPickerView в ViewController с помощью делегата или замыкания. Выберите подход, который лучше соответствует вашим потребностям и продолжайте программировать!