类型[Node]在Swift 4.0中不符合'Equatable'吗?

时间:2018-05-21 01:29:56

标签: arrays swift eureka-forms

我在我的项目中使用了Eureka,我希望将类型[Node]用于Cell的Value类型:

final class TreeTVCell: Cell<[Node]>,CellType{//#1:compiling Error in Swift 4.0

}

如您所知,Cell的Value类型必须符合协议Equatable,Objc编写的Node类,它非常简单:

#import "Node.h"

@implementation Node

- (instancetype)initWithParentId : (int)parentId nodeId : (int)nodeId name : (NSString *)name depth : (int)depth expand : (BOOL)expand{
    self = [self init];
    if (self) {
        self.parentId = parentId;
        self.nodeId = nodeId;
        self.name = name;
        self.depth = depth;
        self.expand = expand;
    }
    return self;
}

@end

我的项目在Swift 4.1(Xcode 9.3.1)中编译好了,但是如果我用Xcode 9.2(Swift 4.0)打开项目,它将被编译失败,它抱怨:

  

类型'[Node]'不符合协议'Equatable'

我的Q是为什么它在Swift 4.1中编译好然而在Swift 4.0中失败了? 以及如何在Swift 4.0中修复它?谢谢:))

1 个答案:

答案 0 :(得分:2)

在Swift 4.1之前,Equatable的数组本身并不是Equatable。这不是你可以直接在4.0中修复的东西;它缺乏条件一致性。您必须将Array包装在其他类型中(我们通常将其称为&#34; boxing&#34;类型)并使其成为Equatable。升级到Swift 4.1。

有关详细信息,请参阅Conditional Conformance in the Standard Library