【问题标题】:Swift type conformance to AnySwift 类型符合 Any
【发布时间】:2016-04-30 17:07:04
【问题描述】:

除了函数之外,swift 中的每个类型都符合Any 吗?我知道AnyObject 代表所有类类型,Any 比这更高,代表所有其他类型。然而,我最近遇到了一个情况,我有一个看起来像这样的函数:

func myFunFunction(someArgument: Any) {
    ...
}

当使用 String 参数调用它时:myFunFunction("This is a string") 我收到错误消息,指出类型 String 无法转换为类型 Any

编辑:

上面的例子就是这样,一个例子。我想简化代码只是为了得到答案,但这是我的实际代码:

我有一堂课final class CollectionViewBinder: NSObject, UICollectionViewDataSource, UICollectionViewDelegate { } 作为 ReactiveCocoa 的集合视图绑定助手。

初始化方法:

init(collectionView: UICollectionView, dataSignal: SignalProducer<[[Any]], NoError>, supplementarySignal: SignalProducer<[[Any]], NoError>?) { ... }

如果dataSignal 的类型是SignalProducer&lt;[[String]], NoError&gt;,那是当我收到错误说类型SignalProducer&lt;[[String]], NoError&gt; 无法转换为类型SignalProducer&lt;[[Any]], NoError&gt; 这会让我认为我的错误与ReactiveCocoa 有关可能吗?

【问题讨论】:

  • "除了函数之外,swift 中的所有类型是否都符合 Any" 否。Swift 中的每种类型,包括函数,都符合 Any。
  • 在操场上,我可以毫无错误地调用myFunFunction("a string")。如果您显示实际代码可能会有所帮助。 Swift 错误消息可能会产生误导,而实际错误通常位于不同的行或由不同的原因引起。
  • 我更新了更多代码。
  • 所以您的实际问题似乎是不能将 String 数组作为 Any 参数数组传递。那将是 stackoverflow.com/questions/36954358/… 的副本。

标签: swift


【解决方案1】:

Any 你说得对,苹果文档说:

Any 可以表示任何类型的实例,包括函数类型。

您提供的示例对我来说没有任何问题。通常在这种情况下,错误出现在其他地方,但编译器会给出误导性消息。

【讨论】:

    【解决方案2】:

    您所期望的称为“通用协方差”,目前 Swift 不支持。

    https://nomothetis.svbtle.com/type-variance-in-swift

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 2022-07-14
      • 1970-01-01
      相关资源
      最近更新 更多