什么';在Swift中使用Objective-C类别的正确方法是什么?

什么';在Swift中使用Objective-C类别的正确方法是什么?,swift,xcode6,Swift,Xcode6,我正试图在没有任何运气的情况下将一些分类方法导入到我的Swift文件中 ios桥接头.h: #import "UIColor+Hex.h" UIColor+Hex.h #import <UIKit/UIKit.h> @interface UIColor (Hex) + (UIColor *)colorWithHex:(NSUInteger)hexInt; + (UIColor *)colorWithHexString:(NSString *)hexString; @end

我正试图在没有任何运气的情况下将一些分类方法导入到我的Swift文件中

ios桥接头.h:

#import "UIColor+Hex.h"
UIColor+Hex.h

#import <UIKit/UIKit.h>

@interface UIColor (Hex)

+ (UIColor *)colorWithHex:(NSUInteger)hexInt;
+ (UIColor *)colorWithHexString:(NSString *)hexString;

@end
#导入
@界面颜色(十六进制)
+(UIColor*)colorWithHex:(NSUInteger)hexInt;
+(UIColor*)colorWithHexString:(NSString*)hexString;
@结束

我希望自动完成将显示
UIColor(hexInt:NSUInteger)
UIColor(hexString:String)

实际上,您的类别被转换为Swift,如下所示:

extension UIColor {

    init(hex hexInt: Int) -> UIColor

    init(hexString: String) -> UIColor

}
因此,您应该使用:

let color = UIColor(hex: 0xffffff) // instead of hexInt:

let color = UIColor(hexString: "ffffff")

不过,测试版软件中的自动完成功能可能仍然存在缺陷。

您可以在Swift中直接使用Objective-C类别。这对于一些桥接类来说非常有趣,比如String。使用Objective-C中的类别扩展NSString,然后您可以从Swift访问它(直接在String上!)

方法是在Swift项目中创建一个“桥接头”

完整的说明

其缺点是:

  • 制作一个.h头文件(在Objective-C中),其中包含所有其他
    #import
    语句
  • 将该文件的路径放在生成设置的
    Objective-C桥接头中
  • 无需在Swift文件中导入桥接标头。它已经在那里了

  • 关于您的代码,我有几个问题:在桥接头中,它不应该是“#import”而不是“import”吗?你写了哪一行最后在Swift中导入了你的分类?是的,我的问题是打字错误。下面我接受的代码对我很有效!请看下面我的新答案。基本上,您需要一个桥接头:我正在尝试使用NSAttributedString扩展名(cocopods),我也在桥接头文件中添加了它们,但问题与您的相同。我希望autocomplete能够揭示这些方法,但事实并非如此。。我使用的Pods来自:谢谢,但问题是这个类别在所有swift文件中都是可用的,但是在ObjC中我们可以在实际存在的文件中使用required@MayankJain更重要的是,在Objective-C中,您可以在具有相似方法名称的不同类别之间进行选择。然而,这可能是一个射中你自己脚的好方法。。。也许斯威夫特最终会站在这件事的正确一边。@DanRosenstark同意了。。。!!!在我的一个项目中,我要求导入特定文件中的类别文件,我希望其他文件应使用原始实现,并且只有特定文件才能使用自定义类别。类别是用ObjC写的。3年后。。。自动完成仍然有缺陷。