Swift 应用程序中的 Objective C 框架导致错误(MobFox 广告网络框架)
ObjectiveC framework in Swift app causing errors (MobFox ad network framework)
我正在尝试在我的 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' because it has requirements that cannot be satisfied
我确定我不需要实施其他方法 - 除非我弄错了。
另一个问题是:
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
首先,您似乎缺少 viewControllerForNativeAds
的实现,它列在协议中而不是您发布的代码中。
您是否在 .swift 文件的顶部导入框架模块?
我想通了。这是由框架中的错误引起的。文件 MobFox.h 需要导入 MobFoxNativeAd.h
我正在尝试在我的 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' because it has requirements that cannot be satisfied
我确定我不需要实施其他方法 - 除非我弄错了。
另一个问题是:
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
首先,您似乎缺少 viewControllerForNativeAds
的实现,它列在协议中而不是您发布的代码中。
您是否在 .swift 文件的顶部导入框架模块?
我想通了。这是由框架中的错误引起的。文件 MobFox.h 需要导入 MobFoxNativeAd.h