【问题标题】:How to Write Macros in Swift [closed]如何在 Swift 中编写宏 [关闭]
【发布时间】: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


【解决方案1】:

你可以把你的代码简化成这样。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 2011-03-08
    • 1970-01-01
    • 2010-11-10
    • 2011-02-23
    • 2010-11-14
    相关资源
    最近更新 更多