Swift 我怎样才能告诉斯威夫特使用;否";NSStringDrawingOptions

Swift 我怎样才能告诉斯威夫特使用;否";NSStringDrawingOptions,swift,nsstring,Swift,Nsstring,在Objective-C中,我可以这样打电话,即通过“否”选项: 我如何告诉Swift中的相应电话也这样做。例如,传递NSStringDrawingOptions(rawValue:0)产生运行时错误。如果查看,您会注意到NSStringDrawingOptions被声明为,这就是为什么它在Swift中被转换为枚举(与转换为结构相反) typedef n_ENUM(NSInteger、nsstringdrawing选项){ NSStringDrawingRuncateSlatVisiblelin

在Objective-C中,我可以这样打电话,即通过“否”选项:

我如何告诉Swift中的相应电话也这样做。例如,传递
NSStringDrawingOptions(rawValue:0)
产生运行时错误。

如果查看,您会注意到
NSStringDrawingOptions
被声明为,这就是为什么它在Swift中被转换为
枚举
(与转换为
结构
相反)

typedef n_ENUM(NSInteger、nsstringdrawing选项){

NSStringDrawingRuncateSlatVisibleline=1我从苹果开发者关系部得到了一个关于这个问题的答案(我提出了一个相关的bug)

答案是,如果不需要任何选项,则传递空选项集[]

功能定义(swift3):

所以

或者,由于空值在方法定义中具有默认值,您可以完全跳过它们-因此:

str.boundingRect(with:NSSize(width: 100, height: 100))

对不起,我没有。我以为它被转换为一个结构,但它实际上是一个枚举。我看到的唯一机会是使用
TruncatesLastVisibleLine
,因为如果没有设置NSStringDrawingUserLineFragmentOrigin,注释说
被忽略。
@是的,这也是我当前的解决方法。如果你查看
NSSt的Objc头ringDrawingOptions
它们被声明为具有
1@的值,您的最后一条评论几乎将其固定下来。如果您想将其写下来作为答案,我将接受它并继续解决。这是Swift iOS SDK中的一个长期缺陷。请参阅相关内容:
typedef NS_ENUM(NSInteger, NSStringDrawingOptions) {
    NSStringDrawingTruncatesLastVisibleLine = 1 << 5, // Truncates and adds the ellipsis character to the last visible line if the text doesn't fit into the bounds specified. Ignored if NSStringDrawingUsesLineFragmentOrigin is not also set.
    NSStringDrawingUsesLineFragmentOrigin = 1 << 0, // The specified origin is the line fragment origin, not the base line origin
    NSStringDrawingUsesFontLeading = 1 << 1, // Uses the font leading for calculating line heights
    NSStringDrawingUsesDeviceMetrics = 1 << 3, // Uses image glyph bounds instead of typographic bounds
} NS_ENUM_AVAILABLE_IOS(6_0);
boundingRect(with size: NSSize, options: NSStringDrawingOptions = [], attributes: [String : AnyObject]? = [:]) -> NSRect
str.boundingRect(with:NSSize(width: 100, height: 100), options:[], attributes: [:])
str.boundingRect(with:NSSize(width: 100, height: 100))