在OC中,当遇到可以进行位运算的枚举值时,可以使用|(或运算符组合多个枚举值)
比如这种类型NSStringDrawingOptions
typedef NS_OPTIONS(NSInteger, NSStringDrawingOptions) {
NSStringDrawingUsesLineFragmentOrigin = 1 << 0,
NSStringDrawingUsesFontLeading = 1 << 1,
NSStringDrawingUsesDeviceMetrics = 1 << 3,
NSStringDrawingTruncatesLastVisibleLine NS_ENUM_AVAILABLE(10_5, 6_0) = 1 << 5}
使用注意
[具有位操作的枚举类型才能够进行多值的组合,不是进行位运算的枚举不能]
我们在OC中使用NSStringDrawingOptions时候常做得一个操作是
NSStringDrawingOptions options = NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading;
CGSize NameSize =[text boundingRectWithSize:maxsize options: options attributes:@{NSFontAttributeName : [UIConstants getFont:fontsize]} context:nil].size;
但是如果使用同样的方法在swift中写,就会报错
报错写法:let options : NSStringDrawingOptions = .UsesLineFragmentOrigin | .UsesFontLeading
原因:swift暂时不支持这种写法
解决方法#
在OC中定义这个方法,然后在swift的调用这个方法
具体实现##
第一步#####
创建一个.h和.m的普通文件 ---UIConstants.h
声明并实现方法
+(NSStringDrawingOptions )getDrawingOptions
{
return NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontLeading;
}
第二步#####
在swift的桥接文件LzbTest -Bridging-Header.h
中导入创建文件的.h文件 #import "UIConstants.h"
第三步#####
在swift文件中调用
let options : NSStringDrawingOptions = UIConstants.getDrawingOptions()
就可以解决问题,其他枚举使用类似。