我试图使用协议从swift类中的view controller类触发一个函数。

@objc protocol KestrelDeviceConnectDelegate: AnyObject {
    func readingIsOver()
}

class KestrelDeviceConnect: NSObject {

    weak var delegate: KestrelDeviceConnectDelegate?

    func timerAction() {
        timerCounter += 1
        if(timerCounter >= 20){
            progressHUD.hide()
            timerCounter = 0
            timer.invalidate()
            self.delegate?.readingIsOver()

            //present kestrel alert
        }
    }
}

在视图控制器类viewdidload中
KestrelDeviceConnect *bluetoothManager = [[KestrelDeviceConnect alloc]init];
bluetoothManager.delegate = self;

我想从我的swift类中调用的函数
- (void)readingIsOver {
    [[self logConditionsButton] setHidden:NO];
}

最佳答案

您需要通过将bluetoothManager设置为实例变量来保存强引用

KestrelDeviceConnect *bluetoothManager;

bluetoothManager = [[KestrelDeviceConnect alloc]init];

09-07 13:49