【发布时间】:2021-07-19 14:19:50
【问题描述】:
例如,我们可以在 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)")
}
}
}
【问题讨论】:
-
我不明白你想在这里做什么。
-
这能回答你的问题吗? Macros in Swift?
-
Swift 没有宏系统。大多数代码重用是通过函数和协议扩展来实现的
标签: swift