从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了。

 

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/p/4036216.html

时间: 2024-08-31 17:15:45

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

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

原文:Swift实战-豆瓣电台(二)界面布局   观看地址 http://v.youku.com/v_show/id_XNzMwMDg4NzAw.html   这节的内容主要是storyboard的操作. 有以下几个知识点 1 TableView的DataSource与Delegate的设定.我们将其绑定在ViewController上,使之遵循UITableViewDataSource,UITableViewDelegate协议来实现.然后我们实现了两个函数,一个返回了TableView中行数

Swift教程_CoreData实例(二)_构建数据层

Swift教程_CoreData实例(一)_构建storyboard Swift教程_CoreData实例(二)_构建数据层 Swift教程_CoreData实例(三)_构建控制层(列表数据加载.删除数据) Swift教程_CoreData实例(四)_构建控制层(查询.更新数据) Swift教程_CoreData实例(五)_构建控制层(添加数据) 三.构建数据层 数据层总体结构包括由CoreData构建的数据模型.通过AppDelegate构建相应的初始化对象. coredata数据最终的存储类

程序员眼中的苹果Swift语言:简单 易学 高效

[摘要]Swift正式曝光在镁光灯前,叹息声.惊呼声此起彼伏.不过不用太过担心,Objective-C.Swift能够在同一个应用程序中并存.程序员眼中的苹果Swift语言:简单 易学 高效6月8日消息,对于苹果开发者来说,如今已经进入了"Swift时代".虽然编程语言Objective C备受喜爱,不过它作为苹果主流编程语言的日子已经所剩无几.随着WWDC开发者大会的落幕,Swift即将取而代之,成为苹果新iOS 8.OS X Yosemite的新宠.美国时间6月2日举行的苹果WWD

即使是封闭的苹果,也不得不开源了 Swift

在2015苹果WWDC上,最受欢迎和关注的不是iOS 9和OS X,也不是新的Apple Music,而是苹果软件工程副总裁 Craig Federighi 宣布,苹果的编程语言 Swift 2.0 将会开源. 为 什么大家会如此激动?在过去的15年间,开发者已经显示了对开源工具和平台的偏爱,然而苹果一直让开发者适应自己的技术,远离第三方技术.苹果这样做有一 定风险,有可能会与开发人员关系疏远,也正是这些开发人员一直在开发第三方应用或者服务.程序员想自由选择自己想要的工作方式 ,要留住他们,苹果

苹果推出覆盖Swift程序设计语言内容的新博客Swift Blog

网易科技讯 7月11日消息,据国外媒体报道,苹果周五专为开发者推出覆盖Swift程序设计语言内容的新博客Swift Blog,Swift程序设计语言由苹果在今年WWDC大会上发布. 苹果在一份简要的文字介绍中表示,该博客将让开发者观察到开发工程师设计Swift语言的内幕,此外还有最新的新闻和提示,从而让开发者成为具有创造性的Swift程序员.由于内容不断更新,苹果向开发者和其他有兴趣方面提供了RSS订阅.该公司在该新平台提供Swift兼容性更新.Swift应用将兼容于该公司目前的操作系统,即OS

Swift程序设计语言由苹果在今年WWDC大会上发布

网易科技讯 7月11日消息,据国外媒体报道,苹果周五专为开发者推出覆盖Swift程序设计语言内容的新博客Swift Blog,Swift程序设计语言由苹果在今年WWDC大会上发布. 苹果在一份简要的文字介绍中表示,该博客将让开发者观察到开发工程师设计Swift语言的内幕,此外还有最新的新闻和提示,从而让开发者成为具有创造性的Swift程序员.由于内容不断更新,苹果向开发者和其他有兴趣方面提供了RSS订阅.该公司在该新平台提供Swift兼容性更新.Swift应用将兼容于该公司目前的操作系统,即OS

[置顶] Swift教程_CoreData实例(一)_构建storyboard

Swift教程_CoreData实例(一)_构建storyboard Swift教程_CoreData实例(二)_构建数据层 Swift教程_CoreData实例(三)_构建控制层(列表数据加载.删除数据) Swift教程_CoreData实例(四)_构建控制层(查询.更新数据) Swift教程_CoreData实例(五)_构建控制层(添加数据) 一.概述 文本用swift语言,使用coreData做一个实例,用来学习通过swift使用coreData的方法.以下是实现的效果,包含了增删改查功能

Swift实战-豆瓣电台(五)播放音乐

原文:Swift实战-豆瓣电台(五)播放音乐 观看地址 http://v.youku.com/v_show/id_XNzMwODM0MzI0.html   在这节里面,我们简单学习了一下MediaPlayer的使用 引入媒体框架 import MediaPlayer   申明一个媒体播放器 var audioPlayer:MPMoviePlayerController=MPMoviePlayerController();   播放暂停操作 self.audioPlayer.stop() self

swift 宏定义出现问题

问题描述 swift 宏定义出现问题 http://blog.csdn.net/huangtianyouhehuangg/article/details/50983825 上面的是一个网上的建立宏定义的方法,我照着上面做的,第一个项目可以用,第二个的时候就报错,不能用,过了好大一会儿又莫名其妙的好了,无语.....各种有遇见这种情况吗? 解决方案 Swift 宏定义swift 的宏定义swift之宏定义 解决方案二: 具体错误是什么,是xcode 最新版7.3吗