How to pass multiple enum values as a function parameter

后端 未结 8 1621
余生分开走
余生分开走 2020-11-29 10:04

How would I do the following - passing two NSStringDrawing options as a function parameter in swift:

CGRect boundingRect = [string boundingRectWithSize:CGSiz         


        
8条回答
  •  心在旅途
    2020-11-29 10:27

    Edit: In Swift 3.0:

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

    Edit: This is how you would use the options enum in Swift 2.0:

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

    Edit: The issue has been resolved in iOS 8.3 SDK Beta 1 (12F5027d):

    Modified NSStringDrawingOptions [struct]

    • From: enum NSStringDrawingOptions : Int
    • To: struct NSStringDrawingOptions : RawOptionSetType

    You can now write:

    let options : NSStringDrawingOptions = .UsesLineFragmentOrigin | .UsesFontLeading
    

    After some research and and @Anton Tcholakov's "comment":

    1. If you're targeting OS X 10.10, this is as simple way to do it:

      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. However, in iOS 8 SDK (in the current seed), there's a bug, where NSStringDrawingOptions is ported to Swift as enum : Int, instead of struct : RawOptionSet. You should send a bug report to Apple describing this serious problem.

提交回复
热议问题