说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Swift的坑:如何实现enum的多选?

HTML文档下载 WORD文档下载 PDF文档下载
在Objective-C中,enum是可以多选的,通过将两个enum用“|”括起来,就能够达到多选的效果。那么,在Swift中,如何实现相同的效果?本文作者通过亲身实践及经验参考,给出了答案。

问题

在Objective-C中,enum是可以多选的。如:

NSString* string = @"一段文字";CGRect boundingRect = [string boundingRectWithSize:CGSizeMake(label.frame.width, CGFloat.max) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attributes context:nil];

把两个enum值用“|”括起来,就能达到多选的效果。那么,在Swift中,如何实现相同的效果呢?

Swift中的option类型

Swift的enum不支持多选,所以能够多选的option类型应该用struct : RawOptionSet来实现。要自己实现options类型,可以参考Stack Overflow上的答案,官方的SDK正是采取这种方法移植的。

正确的写法

以上例子中的代码,用Swift的正确写法如下:

let options : NSStringDrawingOptions = .UsesLineFragmentOrigin | .UsesFontLeadinglet boundingRect = string.bridgeToObjectiveC().boundingRectWithSize(CGSizeMake(label.frame.width, CGFloat.max), options: options, attributes: attributes, context: nil)

iOS SDK的Bug

开发者直接在OS X 10.10中这样写即可,但在目前版本的iOS 8 SDK中,这样的写法却是编译通不过。这是因为在iOS 8的SDK里,NSStringDrawingOptions被移植为了enum : Int,而不是struct : RawOptionSet。如何解决这个问题呢?只能借用下Objective-C来workaround。

解决方案

因为用到的options都相同,我只是简单地写了这个类:

  • OCUtils.h

@interface OCUtils : NSObject+ (NSStringDrawingOptions)stringDrawingOptions;@end

  • OCUtils.m

#import "OCUtils.h"@implementation OCUtils+ (NSStringDrawingOptions)stringDrawingOptions{    return NSStringDrawingTruncatesLastVisibleLine |    NSStringDrawingUsesLineFragmentOrigin |    NSStringDrawingUsesFontLeading;}@end

  • 在Bridging-Header.h中加上:

#import "OCUtils.h"

  • 用到的Swift文件:

let boundingRect = string.bridgeToObjectiveC().boundingRectWithSize(CGSizeMake(label.frame.width, CGFloat.max), options: OCUtils.stringDrawingOptions(), attributes: attributes, context: nil)

以上是总体原理,如果有进一步的需求,可以改得更通用一些。

本文转载自:仓薯博客

(责编/唐小引)

按下某组键(HotKey)便执行某程式-VB资料 把所有的字体名称放到 ComboBox -VB资料 把文件置入到Text或RichText中-VB资料 捕捉 MouseExit 事件 -VB资料 操作过程动态显示 -VB资料 查找月份的最后一天-VB资料 程序启动时,如何自动判断 MDB文件是否损坏并自动修复?-VB资料 读取和修改Windows注册表 -VB资料 对VB的IDE环境的扩展 防止文本控件中的部分滚动-VB资料 关闭正在运行的程序 -VB资料 关机消息的拦截 -VB资料 VB获得、设置鼠标双击间隔时间 VB获取当前系统平台 记载Windows使用的时间-VB资料 加速Visual Basic For Application(VBA) 监视程序的运行情况 -VB资料 交换鼠标按钮 -VB资料 交换鼠标左右键 -VB资料 禁止使用 Alt-Tab 或 Ctrl-Alt-Del -VB资料 控制光驱门的开关 -VB资料 VB利用 窗口函数监视系统的运行情况(VB类) VB判断是否在VB5环境下运行 VB判断一个32位程序是否结束 VB判断一个程序启动完成(不是结束) 屏蔽TextBox的系统菜单 -VB资料 启动时禁止装入 Add-Ins -VB资料 让Timer控件每5分钟触发一次事件 -VB资料 让程序启动快一点 -VB资料 VB如何调用系統的【查找】、【替换】的对话框? VB如何动态新增、移除 ODBC DSN? 有关datagridtablestyle 凭什么删我这个贴!我连贴子被谁删的都没权知道吗? 我是个初学者,大家帮帮忙。关于javabean 哪里能下到oracle8 求助:关于MySql如何实现与子查询相同的功能!!! 請高手幫我--> 可以根據表單某欄位的值來開啟不同的表單嗎? 我的数据库是用ADO+SQL联接的,请问要如何在客户机上正常使用呢? Paper Plane 关于Aspose.excel:怎样实现Aspose.excel的风格; Apache如何调试和应用ASP、JSP(FOR Windows) java3d的问题 西安的中程什么时候开始报名,今年有没有推迟? word 的评分系统 有什么关于VC++的MFC库函数的好书吗? 压缩后的影音文件有的在播放的时候为什么不能拖动? 有关static使用的小问题 紧急求助 介绍一本讲c++常用算法的书 怎样解决屏幕的闪烁问题?十分着急。 我声明不再追小仙妹了,你们要就去追吧!! 我不反对了 请教高手:一个简单问题 execl文档如何裁减多余的表格,以便达到压缩文档的容量。 请问下面的电影中,哪些比较好看???谢谢!!! Aweay(BCB绝对实力派) 请进!领分!! c++转java需要做些什么 关于copyfile()的问题,请大家帮忙 Aweay(BCB绝对实力派) 请进!领分!!(2) sql问题,大虾救我 高分求有特殊显示效果的控件 apache与tomcat整合(交流)QQ:71279650 各位大哥,请帮帮忙 有谁知道韩文的翻译软件,谢谢?(在线等待)(1000分够不够?) 請問在sql server2000存儲過程的屬性窗口怎樣設置一個TAB鍵的大小(空格數),注意:不是在查詢分析器中。 如何在JSP里面自定义方法并调用而不用JavaBean? 在GB2312下DROPDOWNLIST中无法选择中文,而英文可以,为什么? 如何 整合 sqlanywhere 到我的程序中阿 摄像头问题,急!! 首次上来,想要一个查询。 关于色彩具类的问题! 请大家多多指教!!!!!!!!!!!!!!!!!!!!!!!!!!! 如何根据IP获得机器名,可以是根据dos命令实现 读出的文本是乱码,求救 读取Access数据库报错,急 急!电脑为何无过重启 oracle8i 中的apache port的问题? 请教,怎么用vb“破坏”一个数据库,在“恢复” 回来 毕设求助 请谈谈做大数量遍历时,采用ArrayList和LinkedList在性能方面的差别. 大家好! 在frontpage 中插入某.swf 文件时, 提示说“不能加载该文件”,请问怎样解决 QT&Kdevelop雕虫小技集(原创) The policeman asked the boy后面的句子应该用什么时态 王字旁鲁怎么念 一个养禽专业户想用一段长24米的篱笆一面墙围成一个长方形养鸡场,如何围这鸡场 This is a question about phsics.一烧杯中盛满了水,现将一块石子放入水中,水对容器底的压强()A)不变 B)变大 C)变小 D)无法确定我这个人理解能力比较差.所以麻烦大家对各个步骤对解释清楚,小雨 描写荒山野岭的句子五年级作文,要求详细描写荒山野岭. 斗去一笔是什么字 默而知之中知的意思 用枝繁叶茂,荒山野岭,青山碧岭造句语言通顺一点 热得aab行视的词? 由字五怎么打 描写春草,树,鸟,山,柳树,云,湖,海,楼的古诗. 诗句青山什么,毕竟什么. 讯打五字怎么打 衣鱼虫咬人吗?衣服上生了这种虫子后还能穿吗? 英语翻译我是问”王桀字仲宣”这篇文言文的翻译拉! 我要哲理诗2首 关于雷锋精神的作文 300字 主要内容要在50字以内. 焗字用极品五笔怎么打 求两首哲理诗要快点! 描写瀑布,柳树,梅花,月亮的诗句一句,马上,快 远古时代最凶猛的霸王龙最高有多高呢? 默而知之 学而不厌 诲人不倦 何有于我哉 意思 分别借用两句古诗来赞美:小草、春雨、庐山、柳树、西湖、梅花、鸟 霸王龙和暴龙谁比较凶猛?^O^ 上大学时,新生开学自我介绍要讲些什么内容,和注意哪些问题? 雷锋精神的精髓是什么? 让苍蝇变得像蜜蜂一样可爱是什么意思 蜗牛由那几部分组成? 雷锋精神的实质?简洁、明了. 苹果和桔子共200千克,苹果的重量是桔子的3分之1,橘子和苹果各几千克,方程解 一个王字旁一个从字怎么打 tell me , thankstell me , thanks 墙字反笔怎么写 王字旁一个争字,怎么打? 塑料和树脂的关系 tell me.thanks麻烦浅显一点嘛 :) 那位手机高手给我详细解释下ROM和RAM? he made some toys _ his little son.A please B to please C pleasing D pleased iphone 在北京的苹果专卖店地址是什么?Tell me,thanks 智能机的RAM和ROM是什么意思,用最通俗的语言解释那些答百度一下的给我滚,那些粘贴什么百科的也给我回避.RAM容量大和ROM容量大对手机的运行速度的分别有什么影响?买手机要注意看ROM还是RAM 过新春 吃汤圆寓含( )之意吃粽子的含义 一个小游戏 就是从水、火一直到微生物到人类的一点开来有一只小猫的 4399有 ;忘了叫什么名字 有什么和什么融合的,就像水和风啊 什么的 世界上一共有多少种交通工具? 跪求1——2首古代哲理诗!要包含内容,诗里的名句,作者情况,翻译(最好是以现代诗歌翻译)还有写作特色!那个、忘了说,最好要是小学没学过的啊. 今天发现一只昆虫,很大,很吓人,触角很长,体长也很长,可以和后边下水道盖子做参照物,背上是黑色+白色条纹,口器也很大,我用帕子包着它,还唧唧唧唧的叫,太瘆人了 water 的现在分词为什么不双写n 用小木条轻敲蜗牛贝壳,蜗牛会做出反应吗? 刚才在家里发现了一只虫子,这是啥.有什么危害? 第15题,求方法 斜王旁 加个邪 是什么字 这是什么虫,有人见过吗 发现一只昆虫,不知道叫什么? 棘背龙和霸王龙到底谁厉害?我认为是棘背龙强一些 一首关于柳树的诗? 厕所发现一头虫子不知是什么头部蜘蛛一般很多细触角,无翅膀,一根指头长,有一个有点像泥鳅的尾巴,但比泥鳅细很多有粘性.很长,请教这是什么虫, 霸王龙和棘龙谁更厉害 翻译:清洁的饮用水 AAB式的形容颜色的词语 霸王龙和棘龙比哪个厉害 饮水也要讲究科学卫生.改病句急!`~~ 图是某个养禽专业户用一段长13米的篱笆围成的一个长方形养鸡场,求养鸡场的占地面积. 明星照被恶搞:杨幂鼻孔变插孔 赵本山中国全国政协副主席王正伟访问印度《旅游法》洗牌旅游业 “不许购物”是十八届三中全会前瞻:国企分类改革与监奢华政府楼盘点:花40亿建世界第二大房地产调控:未撼动房价却推高离婚率房子改变社会生态:大城市还能容下“穷新消法:回避“知假买假” “假一赔三玻利维亚一飞机降落时爆炸起火致8死1中国富豪接班大考:13位“富二代”谈法国支持韩国提出的“朝鲜半岛信任进程孟加拉国反对党再次举行连续三天的全国德国政府拒绝为斯诺登提供避难巴基斯坦西北部发生严重交通事故10人尼日利亚商贸中心大火得到控制 无中国两岸企业家紫金山峰会南京开幕新加坡政府提高警惕应对黑客威胁俄罗斯庆祝“人民团结日”日本一体育交流团体在朝开设代理事务所马来西亚绿色植物在国土面积中占74%缅甸政府首次与多支少数民族武装组织集冏事一箩筐股民人均亏损41万约8年工资一个泥瓦匠的股海漂流记留住婚姻︐ 还需爱以外的东西女孩情急掏出一张男人身份证终于逮到一个“做空”黑手谈情说爱“伊斯兰国后勤部长”在美军空袭中毙命希腊将举行全民公投 救助失败责任在谁哥伦比亚反腐奇招:让公务员接受测谎仪巴西政府指责全球15家最大跨国银行操因学术成果造假 韩国科学家在美锒铛入英国石油同意支付187亿美元 和解漏朝鲜智库负责人:朝方对加入亚投行抱有奥巴马讽共和党竞选人多 好比《饥饿游重拾美好快问快答店铺内物品半夜遭人搬空我家猫咪会开门成名不会忘记本真不如一别两宽
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘