Не может соответствовать быстрому протоколу делегата от цели- c - PullRequest
3 голосов
/ 24 января 2020

Я использую swift pod в целевом C проекте.
Я успешно получаю доступ к swift классам из target- c, в любом случае, я сталкиваюсь с проблемой принятия протокола swift.
Компилятор не жалуется, сгенерированный мостовой заголовок кажется правильным.

Проблема возникает во время выполнения при вызове [self.sceneLocationView setLocationNodeTouchDelegate: self];, что приводит к [ARCL.SceneLocationView setLocationNodeTouchDelegate:]: нераспознанный селектор, отправленный на экземпляр .

Я не могу найти какое-либо решение этой проблемы, я потратил время на поиск здесь, но все еще не повезло, чтобы это работало.
Любая помощь будет принята с благодарностью.
Спасибо

Мои быстрые и объективные файлы c показаны ниже.

SceneLocationView.swift:

@available(iOS 11.0, *)
open class SceneLocationView: ARSCNView {
   ...
   @objc public weak var locationNodeTouchDelegate: LNTouchDelegate?
   ...
}

SceneLocationViewDelegate.swift:

@objc public protocol LNTouchDelegate: class {
    func locationNodeTouched(node: AnnotationNode)
}

ViewController.h :

#import "ARCL-Swift.h"

@interface ViewController : UIViewController <LNTouchDelegate>{
}

@property (nonatomic, strong) SceneLocationView *sceneLocationView;

ViewController.m:

#import "ARCL-Swift.h"
#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.sceneLocationView = [[SceneLocationView alloc] init];
    [self.sceneLocationView run];
    [self.view addSubview: self.sceneLocationView];
    ...
    [self.sceneLocationView setLocationNodeTouchDelegate: self]; <-- ERROR HERE
}

-(void) locationNodeTouchedWithNode:(AnnotationNode *)node {
}

ARCL-Swift.h:

SWIFT_PROTOCOL("_TtP4ARCL15LNTouchDelegate_")
@protocol LNTouchDelegate
- (void)locationNodeTouchedWithNode:(AnnotationNode * _Nonnull)node;
@end

SWIFT_CLASS("_TtC4ARCL17SceneLocationView") SWIFT_AVAILABILITY(ios,introduced=11.0)
@interface SceneLocationView : ARSCNView
@property (nonatomic, weak) id <LNTouchDelegate> _Nullable locationNodeTouchDelegate;
- (nonnull instancetype)init;
- (nonnull instancetype)initWithFrame:(CGRect)frame options:(NSDictionary<NSString *, id> * _Nullable)options OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (void)layoutSubviews;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
@end
...