gpt4 book ai didi

ios - Swift 不从 Objective-C header 导入 typedef

转载 作者:IT王子 更新时间:2023-10-29 05:37:23 24 4
gpt4 key购买 nike

似乎 Swift 无法识别 Objective-C-Header 中的 typedef,因为我收到以下错误:

无法从类型“MMDrawerControllerDrawerVisualStateBlock!”中找到用户定义的转换!输入“(MMDrawerController!, MMDrawerSide, CGFloat) -> Void”

我使用 MMDrawerController这是用 Objective-C 编写的,但我自己的代码是用 Swift 编写的。

typedef 看起来像这样:

typedef void (^MMDrawerControllerDrawerVisualStateBlock)(MMDrawerController * drawerController, MMDrawerSide drawerSide, CGFloat percentVisible);

为了清晰起见,这里有更多代码片段:

AppDelegate.swift

func initDrawerController() {
drawerController = MMDrawerController(centerViewController: centerController, leftDrawerViewController: leftDrawerController, rightDrawerViewController: rightDrawerController)
drawerController?.setDrawerVisualStateBlock(MMDrawerVisualState.parallaxVisualStateBlockWithParallaxFactor(2.0))
}

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

MMDrawerVisualState.h

@interface MMDrawerVisualState : NSObject
+(MMDrawerControllerDrawerVisualStateBlock)parallaxVisualStateBlockWithParallaxFactor:(CGFloat)parallaxFactor;
@end

Module-Bridging-Header.h

#import "MMDrawerController.h"
#import "MMDrawerVisualState.h"

在构建它时,我的 AppDelegate 中出现错误,因为 setDrawerVisualStateBlock 的表达式,尽管 MMDrawerController.h 中有一个 typedef:

这是一个错误吗(因为在 Objective-C 上,它工作正常)?或者有没有人知道/知道如何处理它?非常感谢您的帮助,谢谢!

最佳答案

Objective-C typedef 声明(例如在 MMDrawerController.h 中):

typedef NS_ENUM(NSInteger, MMDrawerOpenCenterInteractionMode) {
MMDrawerOpenCenterInteractionModeNone,
MMDrawerOpenCenterInteractionModeFull,
MMDrawerOpenCenterInteractionModeNavigationBarOnly,
};

在 Swift 中,它是这样导入的:

enum MMDrawerOpenCenterInteractionMode: NSInteger {
case None
case Full
case Only
}

所以你可以在 Swift 中使用这个语法:

var mmDrawerViewController:MMDrawerController! = ....... ;
mmDrawerViewController.centerHiddenInteractionMode = MMDrawerOpenCenterInteractionMode.Full;

使用mmDrawerViewController.setDrawerVisualStateBlock()尝试

mmDrawerViewController.setDrawerVisualStateBlock{ (drawerController:MMDrawerController!, drawerSlide:MMDrawerSide!, cgFloat:CGFloat!) -> Void in
println("setDrawerVisualStateBlock");
...
}

关于ios - Swift 不从 Objective-C header 导入 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25338468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com