How would I do the following - passing two NSStringDrawing options as a function parameter in swift:
CGRect boundingRect = [string boundingRectWithSize:CGSizeMake(280.0, NSIntegerMax) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:options context:nil];
Learn to create Java enum where each enum constant may contain multiple values. We may use any of the values of the enum constant in our application code, and we should be able to get the enum constant from any of the values assigned to it.
We have to create parameterized constructor for this enum class. Why? Because as we know that enum class's object can't be create explicitly so for initializing we use parameterized constructor. And the constructor cannot be the public or protected it must have private or default modifiers.
An enum instance may hold multiple values only as much as an int can: that is, not at all.
The Enum constructor can accept multiple values.
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":
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)
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.
Updated answer for Xcode 6.3:
in Xcode 6.3 Beta (Swift 1.2) this is finally fixed, you can do it now like this:
let boundingRect = "string".boundingRectWithSize(size, options: .UsesLineFragmentOrigin | .UsesFontLeading, attributes:nil, context:nil)
For old version:
It looks like a bug in current beta, for now I write Objective-C method and use it from Swift:
+ (NSStringDrawingOptions)combine:(NSStringDrawingOptions)option1 with:(NSStringDrawingOptions)option2 { return option1 | option2; }
and call form Swift:
let boundingRect = "string".boundingRectWithSize(size, options: StringDrawingOptions.combine(.UsesLineFragmentOrigin, with: .UsesFontLeading), attributes:nil, context:nil)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With