我想在Swift中使用Objective-C的一个函数

时间:2015-10-29 08:16:53

标签: ios objective-c swift

我想得到一个String的宽度,我得到了使用这个方法的答案(但它只是在OC中):enter image description here

我在官方API文档中找到它。当然没有Swift版本。 由于我对OC一无所知,我无法用OC语言编写所有代码。但我发现我可以创建一个XXX-Bridging-Header.h文件,并导入我要在.swift文件中使用的OC的头文件。

但是我不知道这个函数是哪个头文件。我希望有人可以告诉我文件名或指出另一种获取String宽度的方法。

相当欣赏!!

3 个答案:

答案 0 :(得分:2)

在iOS 7.0中不推荐使用sizeWithFont:forWidth:lineBreakMode:方法。

替换为boundingRectWithSize:options:attributes:context:,可从Swift获取。

以下是一个用法示例:

let myString = "Hello World" as NSString
let width = 100.0 as CGFloat
let height = 40.0 as CGFloat
let maxSize = CGSizeMake(width, height)
let options: NSStringDrawingOptions  = [.TruncatesLastVisibleLine, .UsesLineFragmentOrigin]
let attr = [ NSFontAttributeName : UIFont.systemFontOfSize(17) ]
let labelBounds = myString.boundingRectWithSize(maxSize, options: options, attributes: attr, context: nil)

结果位于labelBounds CGRect。对于此示例,它是

{x 0 y 0 w 88.312 h 20.287}

答案 1 :(得分:2)

您想要弃用的功能,并替换为:

CGRect textRect = [text boundingRectWithSize:size
                           options:NSStringDrawingUsesLineFragmentOrigin
                          attributes:@{NSFontAttributeName:FONT}
                             context:nil];

您可以设置尺寸:

CGSize size = textRect.size;

在斯威夫特:

 NSString(string).boundingRectWithSize(CGSize(width, DBL_MAX),
                                      options: NSStringDrawingOptions.UsesLineFragmentOrigin,
                                      attributes: [NSFontAttributeName: FONT],
                                      context: nil)

FONT是你想要的字体。

答案 2 :(得分:1)

搜索api documentation,你会发现:NSString。

您可以在NSString中看到它,因此您无需将其添加到桥接标头中。 Swift在swift字符串和NSString之间进行免费桥接,但是,这种方法已被弃用,因此您可能必须明确使用NSString(不推荐)