Слушатель в моем ViewController для моего пользовательского класса Cocoapod - Swift - PullRequest
0 голосов
/ 30 ноября 2018

Я создал свой собственный Cocoapod, который в настоящее время запускает функцию updateCounting() раз в секунду.Моя конечная цель - использовать protocol, чтобы я мог иметь своего рода метод делегата в моем классе контроллера представления, который срабатывает каждый раз при запуске updateCounting().

Мой общедоступный файл Cocoapod в настоящее время выглядит следующим образом:

public class Service: NSObject {
    var timer = Timer()
    public static let shared = Service()

    public func scheduledTimerWithTimeInterval(){
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.updateCounting), userInfo: nil, repeats: true)
    }

    @objc func updateCounting(){
        NSLog("counting..")
    }
}

Мой класс VC в настоящее время выглядит следующим образом:

import UIKit
import JacquardToolkit

class ViewController: UIViewController {
    override func viewDidLoad() {
         super.viewDidLoad()
         Service.shared.scheduledTimerWithTimeInterval()
    }
}

Моя первоначальная мысль состоит в том, чтобы добавить протокол к моему Service класс примерно так:

public protocol ServiceDelegate: NSObjectProtocol {
    func timerFired()
}

public class Service: NSObject, ServiceDelegate {

    var timer = Timer()
    public static let shared = Service()

    public func scheduledTimerWithTimeInterval(){
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.timerFired), userInfo: nil, repeats: true)
    }

    @objc public func timerFired() {
        NSLog("timerfired")
    }

}

Пока я застрял, но я по сути пытаюсь сделать слушателя в своем классе VC, чтобы каждый раз, когда срабатывает timerFired() или updateCounting(), я мог обнаружитьчто в моем классе VC и действовать соответственно.Любая помощь приветствуется:)

1 Ответ

0 голосов
/ 30 ноября 2018

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

class ViewController: UIViewController, ServiceDelegate {
override func viewDidLoad() {
    super.viewDidLoad()
    Service.shared.delegate = self
    Service.shared.scheduledTimerWithTimeInterval()
}

func timerFired() {

    NSLog("timerfired")
}
}
public protocol ServiceDelegate: NSObjectProtocol {
    func timerFired()
}

public class Service: NSObject {


var timer = Timer()
public static let shared = Service()
weak var delegate:ServiceDelegate?

public func scheduledTimerWithTimeInterval(){
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.timerFired), userInfo: nil, repeats: true)
}

@objc public func timerFired() {
    NSLog("timerfired")
    delegate?.timerFired()
}

}
...