一尘不染

如何将多个枚举值作为函数参数传递

swift

我该怎么做-在swift中传递两个NSStringDrawing选项作为函数参数:

CGRect boundingRect = [string boundingRectWithSize:CGSizeMake(280.0, NSIntegerMax)
                                                      options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                                   attributes:options context:nil];

阅读 620

收藏
2020-07-07

共1个答案

一尘不染

编辑:在 Swift 3.0中

let options: NSStringDrawingOptions = [.usesLineFragmentOrigin, .usesFontLeading]

编辑: 这就是您将在Swift 2.0中使用选项枚举的方式

let options: NSStringDrawingOptions = [.UsesLineFragmentOrigin, .UsesFontLeading]

编辑: 此问题 已在iOS 8.3 SDK Beta
1(12F5027d)中得到解决

修改后的NSStringDrawingOptions[struct]

  • 从: enum NSStringDrawingOptions : Int
  • 至: struct NSStringDrawingOptions : RawOptionSetType

您现在可以编写:

let options : NSStringDrawingOptions = .UsesLineFragmentOrigin | .UsesFontLeading

经过一番研究和@Anton Tcholakov的“评论”:

  1. 如果您以OS X 10.10为目标,这是这样做的简单方法:

    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)

  2. 但是,在iOS 8 SDK(在当前种子中)中,存在一个错误,该错误NSStringDrawingOptions将移植为Swift enum : Int而不是struct : RawOptionSet。您应该向Apple发送错误报告,说明此严重问题。

2020-07-07