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

+ (NSStringDrawingOptions)combine{
return NSStringDrawingTruncatesLastVisibleLine |
NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontLeading;
}

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

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文件,之后实现好了你需要的功能就好了,如:

@implementation Utils

+ (NSStringDrawingOptions)combine{
return NSStringDrawingTruncatesLastVisibleLine |
NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontLeading;
} @end

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

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

let options = Utils.combine()
let calculateSize = CGSize(width: width, height: 0 as Double)
var rect = content.boundingRectWithSize(calculateSize, options: options, attributes: [NSFontAttributeName: font], context: nil)

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

从Objective-C到Swift,你必须会的(二)组合options的更多相关文章

  1. 【Swift学习】Swift编程之旅(二)

    在本节将介绍一些最基础的知识 swift提供自己版本的类型,下面说明几种简单的类型 Int 整型 Double和float 浮点型 String 字符串型 Bool 布尔型 它也提供了3种主要的强大的 ...

  2. Swift基础语法学习总结二

    1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如果有参数和返回值直接写在两个括号里就可以了 1.2 参数需要指明类型,而如果没有返 ...

  3. [Swift]八大排序算法(二):快速排序

    排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...

  4. Swift 中的基础语法(二)

    1.Swift 中的函数 /// 函数的定义 /// /// - Parameters: /// - x: 形参 /// - y: 形参 /// - Returns: 返回值 func sum(x: ...

  5. Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)

    二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...

  6. swift 2.x学习笔记(二)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400 } p.p2 { margin: 0.0px 0. ...

  7. SWIFT 闭包的简单使用二

    import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...

  8. Swift实战-豆瓣电台(二)界面布局

    观看地址 http://v.youku.com/v_show/id_XNzMwMDg4NzAw.html 这节的内容主要是storyboard的操作. 有以下几个知识点 1 TableView的Dat ...

  9. Swift - 25 - 控制转移和二维数组

    //: Playground - noun: a place where people can play import UIKit // fallthrough // fallthrough会在当前c ...

随机推荐

  1. C++等语言中整型int等的取值范围计算方式

    举short为例说明 如果以最高位为符号位,二进制原码最大为0111111111111111=2的15次方减1=32767.最小为1111111111111111=-2的15次方减1=-32767此时 ...

  2. rabbitMQ应用,laravel生产广播消息,springboot消费消息

    最近做一个新需求,用户发布了动态,前台需要查询,为了用户读取信息响应速度更快(MySQL很难实现或者说实现起来很慢),所以在用户动态发布成功后,利用消息机制异步构建 redis缓存 和 elastic ...

  3. js的拼接

    var datatr = " <tr>"; datatr += "<td bgcolor='#EEEEEE'><input class='i ...

  4. FT5X06 如何应用在10寸电容屏

    硬件搭起来看现象,如下图: 红色区域是FT5406上报有效数据的范围(1280*600),以左上角为原点 ,X轴方向上报数据的最大值1280,Y轴方向上报的最大数据是600..但是我用的LG的10.1 ...

  5. Mysql安装过程中出现apply security settings错误的解决方法

    在学习Mysql的过程中,首先要安装Mysql.然而在第一遍安装过程中难免会出现安装错误的时候,当卸载后第二次安装(或者第三次甚至更多次)的时候,往往在安装最后一步会出现apply security ...

  6. request 里面参数设置 (有空瞄下)

    Requests 是用python语言编写的第三方库,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,完全满足 HTTP 测试需求, ...

  7. VCS双机原理

    VCS双机的配置目录:/etc/VRTSvcs/conf/config/main.cf VCS双机的监控脚本目录:/opt/VRTSvcs/bin/mdcc/ VCS双机日志目录:/var/VRTSv ...

  8. Flask框架的学习与实战(一):开发环境搭建

    Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2.很多功能的实现都参考了django框架.由于项目需要,在 ...

  9. Backing up the tail

    The tail of the transaction log usually refers to the contents of the database's transaction log tha ...

  10. http协议再复习(二)

    HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法. HTTPS(Hypertext Transfer ...