如何将#define替换为常见的swift和objective-c使用

时间:2015-09-28 13:00:51

标签: ios objective-c swift uifont

我们的产品是用目标C编写的,我们已经开始在swift中编写新功能。

这是我们的全球文件中写的东西 -

#define SPXFontHelveticaBold(SIZE) [UIFont fontWithName:@"Helvetica" size:SIZE]

我无法在我的快速课程中使用它。

3 个答案:

答案 0 :(得分:5)

swift中没有宏,但您可以使用以下代码块实现相同的功能,该代码块返回UIFont

func SPXFontHelveticaBold (s:CGFloat) -> UIFont{
    return UIFont (name: "Helvetica", size:s )
}

或者您可以定义一个Helper struct,它具有以下功能。

struct Helper {
    static func SPXFontHelveticaBold(s: CGFloat) -> UIFont {
    return UIFont (name: "Helvetica", size:s )
}

let font = Helper.SPXFontHelveticaBold(14)

答案 1 :(得分:2)

Swift不支持宏。 Apple docs表示:

  

将简单宏声明为全局常量,并将复杂的宏转换为函数。

因此将其声明为全局函数,并使用与之前使用的相同方式。

func SPXFontHelveticaBold(size: CGFloat) -> UIFont { 
    return UIFont(name: "Helvetica", size: size) 
}

答案 2 :(得分:0)

我用以下内容替换了我的pragma:

static inline UIFont* SPXFontHelveticaBold(CGFloat SIZE) { 
  return [UIFont fontWithName:@"Helvetica" size:SIZE]; 
}