首页 > 解决方案 > 如何使用 Typealias 或 Closure 在 swift 中定义一个带有 name 参数的常量?

问题描述

在 Objective CI 中,过去使用#defines 定义常量,作为一种快速明确地定义本地化字符串并保持代码更简洁的方法。

例如:

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

这将允许我在与字符串命名相同的常量中定义,因此DefineStringKey(@"IntroTitle");将创建一个名为IntroTitle的常量,其值是IntroTitle,我可以在我的代码中引用它(自动完成和所有)。

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

类型别名

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

关闭

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

显然我给出的两个例子都不正确。这是我可以通过另一种方法在 Swift 中做的事情,还是我的语法刚刚结束。

编辑添加一个用例。

标签: swift

解决方案


不幸的是,Swift没有宏,所以你不能定义一个常量(或变量)而不写出let myConstant = .... 您可以做的是使用闭包来定义可以在闭包的内部范围内使用的常量:

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

把它放在全局范围内的任何地方,你可以像这样使用它:

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

打印出来IntroTitle。虽然这不是很有用,我不建议使用它。在 swift 中,您必须明确输入您的变量定义。


推荐阅读