首页 > 解决方案 > 如何在 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)")
        }
        
    }
}

标签: swift

解决方案


您可以将代码简化为此。

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)")
        
    }
}

推荐阅读