如何使用Typealias或Closure快速定义带有参数的常量?

时间:2019-07-03 20:26:25

标签: swift

在目标C中,我曾经使用#defines定义常量,以快速,显式地定义用于本地化的字符串并保持代码更简洁的一种方式。

例如:

#define DefineStringKey(x) static NSString *const x = @#x

这将允许我定义与字符串相同名称的常量 因此DefineStringKey(@"IntroTitle");会创建一个名为 IntroTitle 的constnat,其值应为代码中的 IntroTitle (自动填充和全部)。

我有一个想法,我也许可以在Swift中做同样的事情,但是我似乎无法使用typealias或闭包来正确获取语法。

输入别名

typealias DefineStringKey:(x:String) = let x:String = x 

关闭

let DefineStringKey:(String) = (String) -> () {
   (x:String) in
   let x:(String) = x
}

很明显,我给出的两个示例都是错误的。这是我可以通过另一种方法在Swift中完成的事情还是我的语法刚刚结束。

已编辑以添加用例。

1 个答案:

答案 0 :(得分:0)

不幸的是, Swift 没有宏,因此,如果不写出let myConstant = ...,就无法定义常量(或变量)。您可以做的是使用闭包定义一个常量,您可以在闭包的内部范围内使用它:

func defineStringKey(_ key: String, handler: (String) -> Void) {
    handler(key)
}

将其放置在全局范围内的任何位置,您可以像这样使用它:

defineStringKey("IntroTitle") { IntroTitle in
    print(IntroTitle)
}

将打印出IntroTitle。不过,这不是很有用,我不建议您使用它。您必须迅速输入明确的变量定义。