boe*_*qsh 10 typedef objective-c ios swift mmdrawercontroller
似乎Swift无法识别Objective-C-Header中的typedef,因为我得到以下错误:
无法从"MMDrawerControllerDrawerVisualStateBlock!"类型中找到用户定义的转换 输入'(MMDrawerController!,MMDrawerSide,CGFloat) - > Void'
我使用的是用Objective-C编写的MMDrawerController,我自己的代码虽然在Swift中.
typedef如下所示:
typedef void (^MMDrawerControllerDrawerVisualStateBlock)(MMDrawerController * drawerController, MMDrawerSide drawerSide, CGFloat percentVisible);
Run Code Online (Sandbox Code Playgroud)
为清晰起见,这里有更多代码段:
AppDelegate.swift
func initDrawerController() {
drawerController = MMDrawerController(centerViewController: centerController, leftDrawerViewController: leftDrawerController, rightDrawerViewController: rightDrawerController)
drawerController?.setDrawerVisualStateBlock(MMDrawerVisualState.parallaxVisualStateBlockWithParallaxFactor(2.0))
}
Run Code Online (Sandbox Code Playgroud)
MMDrawerController.h
typedef void (^MMDrawerControllerDrawerVisualStateBlock)(MMDrawerController * drawerController, MMDrawerSide drawerSide, CGFloat percentVisible);
@interface MMDrawerController : UIViewController
-(void)setDrawerVisualStateBlock:(void(^)(MMDrawerController * drawerController, MMDrawerSide drawerSide, CGFloat percentVisible))drawerVisualStateBlock;
@end
Run Code Online (Sandbox Code Playgroud)
MMDrawerVisualState.h
@interface MMDrawerVisualState : NSObject
+(MMDrawerControllerDrawerVisualStateBlock)parallaxVisualStateBlockWithParallaxFactor:(CGFloat)parallaxFactor;
@end
Run Code Online (Sandbox Code Playgroud)
模块桥接-Header.h
#import "MMDrawerController.h"
#import "MMDrawerVisualState.h"
Run Code Online (Sandbox Code Playgroud)
构建这个时,我的AppDelegate中出现了一个表达式错误setDrawerVisualStateBlock,尽管在下面有一个typedef MMDrawerController.h:
这是一个错误(因为在Objective-C上,它工作正常)?或者有谁知道/有想法如何处理它?非常感谢帮助,谢谢!
Objective-C typedef 声明(例如在 MMDrawerController.h 中):
\n\ntypedef NS_ENUM(NSInteger, MMDrawerOpenCenterInteractionMode) {\n MMDrawerOpenCenterInteractionModeNone,\n MMDrawerOpenCenterInteractionModeFull,\n MMDrawerOpenCenterInteractionModeNavigationBarOnly,\n};\nRun Code Online (Sandbox Code Playgroud)\n\n在 Swift 中,它\xe2\x80\x99 像这样导入:
\n\nenum MMDrawerOpenCenterInteractionMode: NSInteger {\n case None\n case Full\n case Only\n}\nRun Code Online (Sandbox Code Playgroud)\n\n所以你可以在 Swift 中使用这个语法:
\n\nvar mmDrawerViewController:MMDrawerController! = ....... ;\nmmDrawerViewController.centerHiddenInteractionMode = MMDrawerOpenCenterInteractionMode.Full;\nRun Code Online (Sandbox Code Playgroud)\n\n使用 mmDrawerViewController.setDrawerVisualStateBlock()\n尝试
\n\nmmDrawerViewController.setDrawerVisualStateBlock{ (drawerController:MMDrawerController!, drawerSlide:MMDrawerSide!, cgFloat:CGFloat!) -> Void in\n println("setDrawerVisualStateBlock");\n ...\n}\nRun Code Online (Sandbox Code Playgroud)\n