Objective c 将0作为枚举选项传递给Swift中的目标C函数
有些Objective-C库的函数将整数枚举选项作为参数,但它们希望您在需要默认选项时传入0,这是典型的。但在Swift中,这是不允许的,因为库指定了枚举类型。有没有办法解决这个问题,向库中添加一个0枚举选项,然后生成桥接代码,使其ObjC枚举在Swift中工作 以下是iPhone应用程序中的Objective c 将0作为枚举选项传递给Swift中的目标C函数,objective-c,swift,enums,Objective C,Swift,Enums,有些Objective-C库的函数将整数枚举选项作为参数,但它们希望您在需要默认选项时传入0,这是典型的。但在Swift中,这是不允许的,因为库指定了枚举类型。有没有办法解决这个问题,向库中添加一个0枚举选项,然后生成桥接代码,使其ObjC枚举在Swift中工作 以下是iPhone应用程序中的SDWebImageManager示例: SDWebImageManager.sharedManager().downloadWithURL(url, options: 0, progress: nil)
SDWebImageManager
示例:
SDWebImageManager.sharedManager().downloadWithURL(url, options: 0, progress: nil) { (image:UIImage!, error:NSError!, cacheType:SDImageCacheType, finished:Bool) -> Void in
// block code here
}
Xcode将指出一个错误,其中显示选项:0
,因为'Int'不能转换为SDWebImageOptions
。我尝试了以下方法,但得到了相同的错误:
let emptyOptions:SDWebImageOptions = 0
从Swift 2开始,选项集的语法已更改为使用数组文字。因此,如果不想传递任何选项,则传递一个空列表:
SDWebImageManager.sharedManager().downloadWithURL(url, options: [], progress: nil) { (image:UIImage!, error:NSError!, cacheType:SDImageCacheType, finished:Bool) -> Void in
// code here
}
尝试此操作时,我发现错误
SDWebImageOptions不符合协议NilLiteralConvertible
。如果我这样做,Swift似乎希望downloadWithURL
函数接受options
的可选参数,但当然ObjC不支持可选类型。请确保您使用的是最新版本的Xcode。这个代码应该可以工作。Objective-C中声明的枚举和Swift中实现的BEGINE结构RawOptionSetType
继承到NiLiteralConvertible
。或者,您可以使用SDWebImageOptions.allzero
或SDWebImageOptions(0)
。如何SDWebImageOptions(rawValue:0)
?