【问题标题】:Swift generic type with Void cannot invoke method without argument [duplicate]带有 Void 的 Swift 泛型类型无法调用没有参数的方法 [重复]
【发布时间】:2018-02-08 00:26:31
【问题描述】:

假设我有一个像 class Foo <T> 这样的泛型类型和像 func bar (_ arg: T) 这样的方法。

如果我做let foo = Foo<Void>(),我不能在没有得到的情况下做foo.bar()

Cannot invoke 'bar' with no arguments

这不是以前在旧版本的 Swift 中工作的吗?还是我做错了什么?

foo.bar(()) 有效,但显然不够理想。

【问题讨论】:

  • 您可以在extension Foo where T == Void 中定义func bar() { bar(()) } 重载,类似于the example shown here
  • 我不确定你的问题是什么。该方法有一个Void 类型的参数,您必须在调用该方法时指定它。你的理想是什么?
  • @Hamish 您的回答似乎有效。当你准备好时,我会接受的。
  • @Sulthan foo.bar() 是理想的选择。 foo.bar(()) 2 个字符太多。它在以前的 Swift 版本中工作过。
  • @aleclarson 我决定最好只是更新我现有的答案,以说明它如何也可以用于方法,因此除非您有任何异议,否则我们可以将其关闭为立即欺骗。

标签: swift generics


【解决方案1】:

您可以将参数定义为可选并将 nil 定义为默认值以实现此目的:

func bar (_ arg: T? = nil)

【讨论】:

  • Default argument value of type '()' cannot be converted to type 'T'
  • 很好的答案,但它不适用于我的用例。该函数需要一个非零值,Void 泛型类型除外。
猜你喜欢
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多