Делегат из Obj-C в Swift - метод никогда не выполняется - PullRequest
0 голосов
/ 01 февраля 2019

До того, как я использовал NSNotificationEvents, но, как я знаю, я должен был использовать делегат из-за отношений 1: 1 (он будет использоваться только в одном месте в коде).

По сути, я новичок в target-Cи swift (я парень с JavaScript) и код, который я создал после нескольких часов чтения и проверки - он просто не работает, потому что self.delegate не определен.

Я пытаюсь делегировать «событие» из кода Objective-C для быстрого кода.NSNotificationEvents работает как шарм, но я хочу сделать это с протоколами / делегатом.

Полагаю, мне просто не хватает точной инициализации протокола делегата.


ProtocolDelegate.h

#import <Foundation/Foundation.h>

@protocol ProtocolDelegate <NSObject>
- (void) delegateMethod: (id)data;
@end


Event.h

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import "ProtocolDelegate.h"

@interface Event : NSObject <RCTBridgeModule, ProtocolDelegate>
    @property(nonatomic, weak)id <ProtocolDelegate> delegate;
@end


Event.m (someMethod выполняется из собственного кода JavaScript React, но это не должно отличаться от того, что язнать)

#import "Event.h"


@implementation Event

RCT_EXPORT_MODULE(Events);
RCT_EXPORT_METHOD(someMethod: (NSString*)parameter) {
    NSDictionary* data = @{@"parameter": parameter};

    NSLog(@"This I can see");
    if ([self.delegate respondsToSelector:@selector(delegateMethod:)]) {
        NSLog(@"This I can not see");
        [self.delegate delegateMethod:data];
    }
}


ViewController.swift

class ViewController: UIViewController, ProtocolDelegate {

    // Xcode has automatically created this method
    func delegateMethod(_ data: Any!) {
        os_log("ON AUCTION");
    }

}

Я хочу, чтобы делегатMethod внутри ViewController был выполнен.

Или, может, я неправильно понял всю идею?Objective-C немного смущает меня.

...