我如何告诉Swift使用" no" NSStringDrawingOptions

时间:2014-12-10 13:54:38

标签: swift nsstring

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

[string boundingRectWithSize:size options:0 attributes:attributes context:nil]

如何判断Swift中的相应调用是否也这样做。例如,传递NSStringDrawingOptions(rawValue: 0)!会产生运行时错误。

2 个答案:

答案 0 :(得分:3)

如果您查看Objective-C header,您会注意到NSStringDrawingOptions被声明为NS_ENUM,这就是它在Swift中被转换为enum的原因(反对转换为struct)的NS_OPTIONS

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);

由于您无法在Swift中将其设置为任何其他值,而是可用的枚举案例(不会出现运行时错误)。

正如@rintaro在上面的评论中指出的,这被认为是iOS中的一个错误(在OS X 10.10中得到解决)

答案 1 :(得分:1)

我得到了Apple Developer Relations的答复(我提出了一个相关的错误)。

答案是你想要没有选项时传递空选项set []。

函数定义(swift3):

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))