它是什么意思:"属性类型" JSQMessagesCollectionView"与类型" UICollectionView"不兼容,继承自" UICollectionViewLayout"

时间:2015-04-07 17:40:15

标签: ios objective-c xcode swift

我目前正在使用Swift编写iOS应用程序,我在Objective C中使用了JSQMessages和JSQSystemSoundPlayer等内容。

当我在我的代码中介绍它们时,我有了Xcode 6.2,它运行得很好。 我下载了Xcode 6.3.4以使用Swift 1.2,但现在我有40个警告,如:

“属性类型”JSQMessagesCollectionView“与类型”UICollectionView“不兼容,继承自”UICollectionViewLayout“”

我已经建立了一个Bridging Header来调用Objective C文件。

非常感谢

2 个答案:

答案 0 :(得分:3)

在评论之后,这里是对此警告的解释。

Xcode 6.3有一个更新的编译器工具链,它更严格,因此你会看到更多警告,包括这个警告。

这里,类JSQMessagesCollectionViewFlowLayout声明了一个属性,其定义与其超类相冲突。定义:

@property (readonly, nonatomic) JSQMessagesCollectionView *collectionView;

然而,在超类UICollectionViewLayout中,它被声明为:

@property(nonatomic, readonly) UICollectionView *collectionView;

目标C不支持属性covariance,而这种覆盖是Jesse对语言的错误使用。 JSQMessagesCollectionViewFlowLayout类应该公开一个属于子类的附加属性。

答案 1 :(得分:0)

要删除此警告,只需将@property (readonly, nonatomic) JSQMessagesCollectionView *collectionView;从其班级JSQMessagesCollectionViewFlowLayout.h移至JSQMessagesCollectionViewFlowLayout.m