swift - 如何使用 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没有宏,所以你不能定义一个常量(或变量)而不写出let myConstant = ...
. 您可以做的是使用闭包来定义可以在闭包的内部范围内使用的常量:
func defineStringKey(_ key: String, handler: (String) -> Void) {
handler(key)
}
把它放在全局范围内的任何地方,你可以像这样使用它:
defineStringKey("IntroTitle") { IntroTitle in
print(IntroTitle)
}
打印出来IntroTitle
。虽然这不是很有用,我不建议使用它。在 swift 中,您必须明确输入您的变量定义。
推荐阅读
- angular - “X”类型的参数不能分配给“字符串”类型的参数
- excel - 如果删除行,自定义函数会出错
- wordpress - 使用其他产品作为选项 - WooCommerce
- android - Android Leanback (android tv) 应用程序中的滚动条拇指可见性
- radio-button - 如何在 Laravel Blade 的单选按钮中添加条件
- c# - RX:“ObservableAsProperty”绑定属性不会在 gui 上自动更新
- scala - 如何从 spark scala 中的数据框中找到短语计数?
- spring-boot - 如何将grpc与spring boot一起使用
- c# - Windows 10 UWP App:上传大文件最简单的地方?
- python - 在熊猫数据框中的日期时间列中查找时隙数