从Objective-C到Swift,你必须会的(二)组合options

从Objective-C到Swift,你必须会的(二)组合options

用过Options这个东西的人都知道,几个竖线就把这些值都和到一起了。比如:

?
1
2
3
4
5
+ (NSStringDrawingOptions)combine{
     return NSStringDrawingTruncatesLastVisibleLine |
             NSStringDrawingUsesLineFragmentOrigin |
             NSStringDrawingUsesFontLeading;
}

 很简单的一个东西啊。这个为什么要拿出一篇来专门说呢?因为,APPLE有bug!对,你在Swift里这么做是会报错的(你知道我说的是按照Swift的语法写)。比如:

?
1
2
3
4
let size = CGSize(width: 280 , height: Int . max )
let options : NSStringDrawingOptions = .UsesLineFragmentOrigin | .UsesFontLeading
 
let boundingRect = string.bridgeToObjectiveC().boundingRectWithSize(size, options: options, attributes: attributes, context: nil)

 介个是不work的。编译器会报错:could not find memeber 'UsesLineFragmentOrigin'。但是代码还是要这么写的。遇到有必要同时满足这些不同options的时候也是只能这么写的。

但是既然有这么个bug该怎么办呢?好吧你开着Xcode还找不到现成的么有bug的办法么?想想,你会想到什么?必须是OC了。而且非常方便,虽然还是绕路了,哎。

在一个Swift项目里,添加或者导入OC文件的时候,Xcode会提示你要创建一个bridge header(桥街头文件,咱们就简称桥头吧)。如果系统没有给你间,自己也可以搞定,然后在build settings里面指定好你自己桥头的路径就好了。这个具体的会在本系列说明。

之后创建OC文件,之后实现好了你需要的功能就好了,如:

?
1
2
3
4
5
6
7
8
9
@implementation Utils
 
+ (NSStringDrawingOptions)combine{
     return NSStringDrawingTruncatesLastVisibleLine |
             NSStringDrawingUsesLineFragmentOrigin |
             NSStringDrawingUsesFontLeading;
}
 
@end

 头文件什么的就不用我详细写了吧。就是声明了一下类名称为Utils,这个类包含了一个类方法叫做combine

只要在桥头文件里有这个OC文件的头文件import进去了,那么在Swift文件中就可以直接使用了。你不用在在任何的Swift代码里有import的想法和动作。使用的时候就这样:

?
1
2
3
let <strong>options< / strong> = Utils.combine()
let calculateSize = CGSize(width: width, height: 0 as Double)
var rect = content.boundingRectWithSize(calculateSize, options: <strong>options< / strong>, attributes: [NSFontAttributeName: font], context: nil)

 很简单,这个问题就解决了。后面就等苹果改他的这个bug了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值