【问题标题】:ObjectiveC framework in Swift app causing errors (MobFox ad network framework)Swift 应用程序中的 Objective C 框架导致错误(MobFox 广告网络框架)
【发布时间】:2015-10-22 13:15:43
【问题描述】:

我正在尝试在我的 Swift 应用中实现 MobFox 广告网络。该框架是用我不熟悉的 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 {

以上代码导致错误:Type 'ViewController' cannot conform to protocol '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

【问题讨论】:

    标签: objective-c swift mobfox


    【解决方案1】:

    首先,您似乎缺少viewControllerForNativeAds 的实现,它列在协议中,而不是您发布的代码中。

    您是在 .swift 文件的顶部导入框架模块吗?

    【讨论】:

    • 不,我没有导入框架模块 - 我想我也应该这样做,但这不是由桥接头处理的吗?我看过一个用 swift 编写的示例项目,它也没有导入。这是项目文件:github.com/mobfox/MobFox-iOS-Demo/blob/master/MobFoxSwiftDemo/…
    • 我添加了 func viewControllerForNativeAds() -> UIViewController! { } 我不确定这是否是正确的实现。但它仍然没有解决任何问题。
    【解决方案2】:

    我想通了。这是由框架中的错误引起的。导入 MobFoxNativeAd.h 所需的文件 MobFox.h

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 2017-01-27
      • 2016-04-05
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      相关资源
      最近更新 更多