Вызов локальной функции UIViewController из представления SwiftUI - PullRequest
1 голос
/ 19 октября 2019

Я пытаюсь вызвать локальную функцию ViewController из ContentView. Функция использует некоторые локальные переменные и не может быть перемещена за пределы ViewController.

class ViewController: UIViewController {
    func doSomething() {...}
} 

extension ViewController : LinkViewDelegate {...}

, расположенный в другом файле:

struct ContentView: View {

    init() {
        viewController = .init(nibName:nil, bundle:nil)
    }
    var viewController: viewController

var body: some View {
    Button(action: {self.viewController.doSomething()}) {
            Text("Link Account")
        }
    }
}

UIViewController не может быть изменен на что-то вроде UIViewRepresentable, потому что LinkViewDelegate может толькорасширить UIViewController.

1 Ответ

0 голосов
/ 19 октября 2019

Вы можете передать экземпляр ViewController в качестве параметра ContentView:

struct ContentView: View {
    var viewController: ViewController // first v lowercase, second one Uppercase

    var body: some View {
        Button(action: { viewController.doSomething() }) { // Lowercase viewController
            Text("Link Account")
        }
    }

    init() {
        self.viewController = .init(nibName:nil, bundle:nil) // Lowercase viewController
    }
} 

// Use it for the UIHostingController in SceneDelegate.swift
window.rootViewController = UIHostingController(rootView: ContentView()) // Uppercase ContentView

Обновлен ответ, чтобы лучше соответствовать вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...