【问题标题】:Swift : Generic parameter 'T' could not be inferredSwift:无法推断通用参数“T”
【发布时间】:2019-01-17 16:24:27
【问题描述】:

我有一个名为P 的协议,我想编写一个函数来返回符合该协议的任何类型的实例。

这是我写的:

func f<T: P>() -> T? {
    // ... 
}

但是当我尝试调用它时:

var fp = f()

我收到此错误:Generic parameter 'T' could not be inferred。我做错了什么以及如何解决这个问题? 感谢您的帮助。

【问题讨论】:

标签: swift swift-protocols


【解决方案1】:

你很亲密。假设您有一个符合Pstruct A。然后您可以按如下方式指定泛型参数:

var fp: A? = f()

没有这些信息,编译器就无法知道fp 应该是什么类型。

【讨论】:

  • 您好,谢谢!好吧,我开始明白了,但我还有另一个问题:如果我有两个结构 S1S2,每个都符合 P,并且想要创建一个可以返回的函数S1S2 的实例?对于类,我会创建一个符合SC 类,然后这两个子类型将继承C,但在这里我被结构困住了。
  • 您可以从该函数返回S1S2,只要它们符合P,这完全没问题。你不需要指定返回类型是S1S2 的联合(实际上你现在不能直接在Swift 中这样做)。您想退回这两者中的任何一个吗?
  • 其实这只是一个例子,我可以肯定想要返回任何符合P 的结构并且可能有10 个不同的...
  • 是的,我明白这一点,但为什么您的问题没有通过您显示的代码和我的解决方案解决?我可以返回任何符合P 的类型。
  • 确实如此。感谢您的回答!
猜你喜欢
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 2015-09-22
  • 2018-03-31
  • 1970-01-01
相关资源
最近更新 更多