在Objective-C中,我能够像这样打电话,即通过“否”选项:
[string boundingRectWithSize:size options:0 attributes:attributes context:nil]
如何判断Swift中的相应调用是否也这样做。例如,传递NSStringDrawingOptions(rawValue: 0)!
会产生运行时错误。
答案 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))