我如何替换#define 以供常见的 swift 和 objective-c 使用

How can i replace #define for common swift and objective-c use

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

这是我们全局文件里写的东西-

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

我无法在 swift class 中使用它。

swift 中没有宏,但您可以使用以下代码块实现相同的功能,returns 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)

Swift 不支持宏。 Apple docs 声明:

Declare simple macros as global constants, and translate complex macros into functions.

因此将其声明为全局函数并按照您之前使用的方式使用。

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

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

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