Swift 中的编译时条件协议一致性

Compile-time conditional protocol conformance in Swift

我有一个 Swift class ,在特定的编译时条件下,应该实现特定的协议。我希望条件复杂化 #if 检查会起作用,像这样:

class MyClass
#if SOME_COMPILE_TIME_CHECK
: SomeProtocol
#endif
{
  // ...

  #if SOME_COMPILE_TIME_CHECK
  func someMethodToImplementSomeProtocol() { }
  #endif
}

这不起作用。编译器尝试将每个条件块编译为一系列语句。但是块 : SomeProtocol 不会解析为一系列语句。

还有其他表达方式吗?例如,是否有语句级的方式来表达“MyClass implements SomeProtocol”?

将其放在扩展名中:

#if SOME_COMPILE_TIME_CHECK
extension MyClass : SomeProtocol {
    func someMethodToImplementSomeProtocol() { }
}
#endif