首页 > 解决方案 > Swift:删除 LinkedList 中的通用项目

问题描述

我正在尝试从链接列表中删除通用项目。我遇到的问题是,当我检查时head?.value == value,它需要“T”才能符合 Equatable。

我无法完成这项工作。当我尝试NNode<T>通过将 Equatable 添加到我的泛型类来制作 Equatable 时NNode<T: Equatable>,我的 typealiasNode出现不符合协议 Equatable 的错误。我该怎么办?

class NNode<T: Equatable> {
    var value: T
    var next: NNode?

    init(value: T, next: NNode?) {
       self.value = value
       self.next = next
     }
  }

class LinkedList<T> {
public typealias Node = NNode<T>

func delete(value: T) {
    if head?.value == value {
        head = head?.next
    }

    var prev: Node?
    var current = head

    while current != nil && current?.value != value {
        prev = current
        current = current?.next
    }

    prev?.next = current?.next
   }
}

标签: swiftgenericslinked-list

解决方案


您还需要T遵守EquatableLinkedList

class NNode<T: Equatable> { ... }

class LinkedList<T: Equatable> { 
    public typealias Node = NNode<T>
    ...
}

推荐阅读