zoukankan      html  css  js  c++  java
  • 从Objective-C到Swift,你必须会的(二)组合options

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

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

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

    let size = CGSize( 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, height: 0 as Double)
    var rect = content.boundingRectWithSize(calculateSize, options: options, attributes: [NSFontAttributeName: font], context: nil)
    

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

  • 相关阅读:
    CORS 跨域问题, 以及作为api server 的正确配置, 后台 nginx 配置
    angular2 各种开发种遇到的问题和设置
    angular2 cli 无法正确安装使用解决
    inline-block text-align: justify 实现自适应布局, 当子inline-block之间没有空格时失效及原因
    rails active record 使用default_scope is evil, 记一次 order not work 的排查
    java class jar 的加载问题
    es6 匿名函数求阶乘
    ruby 一些基础的语法, 各种杂物箱
    ruby 给对象添加新的方法
    javascript 核心语言笔记 7
  • 原文地址:https://www.cnblogs.com/sunshine-anycall/p/4036216.html
Copyright © 2011-2022 走看看