为什么即使实现dynamicCall(withArguments :)也不能编译@dynamicCallable?

时间:2019-05-30 03:04:24

标签: swift

我的代码很简单:

@dynamicCallable
struct A {
  func dynamicallyCall(withArguments arguments: Int...) -> Int {
    return 0
  }
}

这引发了错误:

@dynamicCallable attribute requires 'A' to have either a valid 'dynamicallyCall(withArguments:)' method or 'dynamicallyCall(withKeywordArguments:)' method

不知道还有什么可以尝试使它起作用。似乎也没有拼错。

1 个答案:

答案 0 :(得分:2)

方法签名是错误的,因为文档指定它必须具有符合“ ExpressibleByArrayLiteral”协议的单个参数。

  

dynamicCall(withArguments :)方法的声明必须   具有符合ExpressibleByArrayLiteral的单个参数   协议...

https://docs.swift.org/swift-book/ReferenceManual/Attributes.html(选中 dynamicCallable 部分)

因此,您不应将其表示为 Int ... ,而应将其表示为 [Int]