Каркас ObjectiveC в приложении Swift, вызывающий ошибки (каркас рекламной сети MobFox)

Я пытаюсь внедрить рекламную сеть MobFox в свое приложение Swift. Фреймворк построен в ObjC, с которым я не знаком.

Я добавил свой соединительный заголовок.

Я получаю 2 ошибки, которые я не могу понять. Это код, который выдает ошибки:

class ViewController: UIViewController, MobFoxNativeAdDelegate {

...

    func nativeAdFailedToLoadWithError(error: NSError!) {
    }

    func nativeAdWasClicked() {
    }

    func nativeAdWasShown() {
    }

    func publisherIdForMobFoxNativeAdController(controller: MobFoxNativeAdController!) -> String! {
    return "PUBLISHER_ID_HERE"
    }

    func nativeAdDidLoad(ad: MobFoxNativeAd!) {
    }
}

Вот эти проблемы:

class ViewController: UIViewController, MobFoxNativeAdDelegate {

Приведенный выше код вызывает ошибку: тип "ViewController" не может соответствовать протоколу "MobFoxNativeAdDelegate", поскольку он имеет требования, которые не могут быть выполнены

Я уверен, что нет других методов, которые мне нужно реализовать - если я не ошибаюсь.

Другая проблема:

func nativeAdDidLoad(ad: MobFoxNativeAd!) {
}

В этой строке я получаю следующую ошибку: Использование необъявленного типа 'MobFoxNativeAd'

Странно то, что XCode не предлагает этот метод при наборе текста, поэтому он кажется недействительным. Например, если я ввожу native, xcode предлагает nativeAdFailedToLoadWithError, nativeAdWasClicked и nativeAdWasShown, но не предлагает nativeAdDidLoad.

Тем не менее, это обязательный метод.

Глядя на инфраструктуру ObjC, она содержит:

@class MobFoxNativeAdController;
@class MobFoxNativeAd;

@protocol MobFoxNativeAdDelegate <NSObject>

- (NSString *)publisherIdForMobFoxNativeAdController:(MobFoxNativeAdController *)controller;

- (void) nativeAdDidLoad:(MobFoxNativeAd *)ad;

- (void) nativeAdFailedToLoadWithError:(NSError *)error;

- (void) nativeAdWasShown;

- (void) nativeAdWasClicked;

- (UIViewController*) viewControllerForNativeAds;

@end

@interface MobFoxNativeAdController : NSObject

@property (strong, nonatomic) NSString *requestURL;
@property (nonatomic, assign) IBOutlet __unsafe_unretained id <MobFoxNativeAdDelegate> delegate;
@property (nonatomic, assign) BOOL locationAwareAdverts;
@property (nonatomic, assign) NSInteger userAge;
@property (nonatomic, strong) NSString* userGender;
@property (nonatomic, strong) NSArray* keywords;

@property (nonatomic, strong) NSArray* adTypes;

- (void)setLocationWithLatitude:(CGFloat)latitude longitude:(CGFloat)longitude;

- (UIView*)getNativeAdViewForResponse:(MobFoxNativeAd*)response xibName:(NSString*)name;

- (void)requestAd;

@end

2 ответа

Решение

Я понял это. Это было вызвано ошибкой в ​​фреймворке. Файл MobFox.h, необходимый для импорта MobFoxNativeAd.h

Во-первых, вы, кажется, пропустили вашу реализацию viewControllerForNativeAds, он указан в протоколе, а не в коде, который вы опубликовали.

Вы импортируете модуль фреймворка вверху вашего файла.swift?

Другие вопросы по тегам