Swift类型符合Any

时间:2016-04-30 17:07:05

标签: swift

除了函数之外,swift中的每个类型都符合Any吗?我了解AnyObject表示所有类类型,Any处于比此更高的级别,代表所有其他类型。但是我最近遇到了一种情况,我的功能看起来像是:

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

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

编辑:

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

我有一个班级final class CollectionViewBinder: NSObject, UICollectionViewDataSource, UICollectionViewDelegate { } 它充当ReactiveCocoa的集合视图绑定助手。

init方法:

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

如果dataSignal的类型为SignalProducer<[[String]], NoError>,那么当我收到错误提示类型SignalProducer<[[String]], NoError>无法转换为SignalProducer<[[Any]], NoError>类型时这会让我觉得我的错误可能与ReactiveCocoa有关吗?

2 个答案:

答案 0 :(得分:2)

你对Any是正确的,苹果文档说:

  

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

你给我的例子没有任何问题。通常在这种情况下,错误发生在其他地方,但编译器会给出误导性消息。

答案 1 :(得分:1)

您期望被称为&#34;通用协方差&#34;目前Swift不支持。

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