Передача значения в другой класс и отображение его на этом контроллере представления - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть два .swift класса. Test.swift и Start.swift .

Start.swift имеет функцию под названием outputPercentage.См. Ниже.

var startClass = StartView()


class StartView: UIViewController {

    @IBOutlet var testProg: UILabel!

    override func viewDidLoad() {
            super.viewDidLoad()
            testClass.sendpct()
        }

    func outputPercentage(pct: Int32) {
       let pctTxt = String(pct)
       print("Test Progress: ", pctTxt as Any)
       testProg.text = "Test" //pctTxt! + " / 100"
    }
}

testProg - это UILabel.

Функция ниже находится в Test.swift и передает значение Int32 обратно в функцию выше в Start.swift , например:

var testClass = TestView()

class TestView {

  func sendpct() {
     var percentComplete : Int32 = 0;
     startClass.outputPercentage(pct: percentComplete)
  }

}

В приведенной ниже строке выдается ошибка « Неожиданный необязательный nil ».

testProg.text = pct_txt! + " / 100"

UILabel настроен правильно, так как я могу установить его в другом месте класса,эта ошибка возникает только тогда, когда значение было передано из другого класса.

Как правильно вывести значение на мой UILabel?

1 Ответ

1 голос
/ 29 апреля 2019

Лучше использовать Delegate для вашего случая.

В Start.swift

import UIKit

protocol StartDelegate: class {
    func outputPercentage(pct: Int32)
}

class StartView: UIViewController, StartDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.
        var test = Test()
        test.startDelegate = self
        test.sendpct()
    }

    // MARK: - Delegate Methods

    func outputPercentage(pct: Int32) {
        print(pct)
    }

}

В Test.swift

class Test {

    weak var startDelegate: StartDelegate?

    func sendpct() {
        if let startDelegate = startDelegate {
            var percentComplete : Int32 = 0;
            startDelegate.outputPercentage(pct: percentComplete)
        }
    }

}

Надеюсь, это поможет!

...