arrays - Type [Node] 不符合 Swift 4.0 中的 'Equatable'?

标签 arrays swift eureka-forms

我在我的项目中使用 Eureka,我想使用类型 [Node] 作为 Cell 的值类型:

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

}

如你所知,Cell的Value类型必须符合协议(protocol)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) 打开项目,它将编译失败,它会提示:

Type '[Node]' does not conform to protocol 'Equatable'

我的问题是为什么它在 Swift 4.1 中编译正常而在 Swift 4.0 中编译失败? 以及如何在 Swift 4.0 中修复它?谢谢:)

最佳答案

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

参见 Conditional Conformance in the Standard Library了解更多详情。

关于arrays - Type [Node] 不符合 Swift 4.0 中的 'Equatable'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50440907/

相关文章:

ios - 如何删除 Eureka 表单中的 < >(下一个/上一个)完成工具栏?

arrays - 在 Swift 中将 String 数组转换为 CGFloat 数组

javascript - 使用谷歌脚本自动将 CSV 输出到谷歌表格

Java - 查找数组的平均值,同时排除特定值。

swift - 如何使用 Swift 进行子字符串化? iOS 代码

ios - 以编程方式重置对屏幕位置的约束

c - 为什么下面的代码可以工作?

ios - 节点在 Sprite 套件中快速从屏幕上产生

swift - 在 Eureka 中向自定义规则添加规则

ios - Eureka 自定义行