Тип [Node] не соответствует 'Equatable' в Swift 4.0? - PullRequest
0 голосов
/ 21 мая 2018

Я использую Eureka в своем проекте и хочу использовать тип [Node] для типа ячейки Value:

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

}

Как вы знаете, тип значения Cell должен соответствовать протоколу Equatable , и классу Node, написанному Objc, это очень просто:

#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'

Мой вопрос: почему он скомпилирован нормально в Swift 4.1 и не работает в Swift 4.0?и как это исправить в Swift 4.0?Спасибо:)

1 Ответ

0 голосов
/ 21 мая 2018

До Swift 4.1 массивы Equatable сами по себе не являются Equatable.Это не то, что вы можете исправить в 4.0 напрямую;ему не хватает условных соответствий.Вам нужно будет обернуть массив другим типом (мы обычно называем его «боксом» типа) и сделать его уравнительным.Обновление до Swift 4.1.

Подробнее см. Условное соответствие в стандартной библиотеке .

...