swift - 如何在 Swift 中编写宏
问题描述
例如,我们可以在 C++ 中使用宏来编写类似名称的简化版本,如下面的源代码所示,但是在 Swift 中可以这样做吗?
void AddStats(const Stats& add_from, Stats* add_to) {
add_to->set_total_memory(add_from.total_memory() + add_to->total_memory());
add_to->set_free_memory(add_from.total_memory() + add_to->free_memory());
add_to->set_swap_memory(add_from.total_memory() + add_to->swap_memory());
add_to->set_status_string(add_from.total_memory() + add_to->status_string());
add_to->set_num_processes(add_from.total_memory() + add_to->num_processes());
...
}
我们可以通过以下方式编写上面的内容。
void AddStats(const Stats& add_from, Stats* add_to) {
#define ADD_FIELD(field) add_to->set##field(add_from.field() + add_to->field())
ADD_FIELD(total_memory);
ADD_FIELD(free_memory);
ADD_FIELD(swap_memory);
ADD_FIELD(status_string);
ADD_FIELD(num_processes);
...
#undef ADD_FIELD
}
我想用 Swift 写同样的方法,但我不知道怎么写。有人可以告诉我该怎么做吗?
import SwiftUI
enum testEnum: String{
case hoge
case tage
case hige
}
private let hoge = 1
private let tage = 2
private let hige = 3
struct Content: View{
let num: testEnum = .hoge
var body: some View {
if num == .hoge {
Text("\(hoge)")
} else if num == .tage {
Text("\(tage)")
} else if num == .hige {
Text("\(hige)")
}
}
}
解决方案
您可以将代码简化为此。
enum TestEnum: Int{
case hoge = 1
case tage = 2
case hige = 3
}
struct Content: View{
let num: TestEnum = .hoge
var body: some View {
Text("\(num.rawValue)")
}
}
推荐阅读
- json - 如何在 Nuxt 构建期间访问远程数据并将其写入文件?
- angular - Angular nebular web 应用程序未在 safari 浏览器中加载?
- oracle - DBMS_OUTPUT.PUT_LINE 抛出“PL/SQL:数字或值错误”
- python - 分离时芹菜工人不写日志
- ios - 在 iPhone X 上测试 iOS 应用程序
- python - 如何使用 tfidf 矢量化器自动进行文本矢量化?
- c++ - 如何在 C++ 中获取方法的时间?
- java - 使用依赖注入 Spring 在启动时配置静态字段
- java - 在方解石 SQL 中加入两个无限流
- sql-server - 有没有办法将 SQL Server 中的行标记为“非活动”?