gpt4 book ai didi

从文字创建数组时的 Swift 宏

转载 作者:行者123 更新时间:2023-12-05 09:00:38 30 4
gpt4 key购买 nike

对于下面的代码:

let services: [MyServices] = [
MyService(),
#if DEBUG
DebugService(),
#endif
]

我得到编译器错误:

expression failed to parse:error: MyPlayground.playground:375:5: error: expected expression in container literal#if DEBUG^

error: MyPlayground.playground:376:19: error: consecutive statements on a line must be separated by ';'DebugService(),^;

error: MyPlayground.playground:376:19: error: expected expressionDebugService(),^

error: MyPlayground.playground:378:1: error: expected expression]

但同样的代码在 Objective-C 中也能工作

NSArray *array = @[
@"11",
#if DEBUG
@"debug",
#endif
@"22"
];

这是编译器错误还是预期行为?谢谢。

最佳答案

通常,#if ... #else ... #endif 编译器指令中每个子句的主体必须包含完整的语句。

但随着 SE-308 #if for postfix member expressions 的实现在 Swift 5.5 中,此指令已扩展为能够包围后缀成员表达式。

所以有了自定义扩展

extension Array {
func appending(_ e: Element) -> Self {
return self + [e]
}
}

可以像这样有条件地初始化一个数组:

let services = [
MyService() ]
#if DEBUG
.appending(DebugService())
#endif

关于从文字创建数组时的 Swift 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75284129/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com