태그: mutating
- This topic has 1개 답변, 2명 참여, and was last updated 1 year, 2 months 전에 by rodxx.
-
글쓴이글
-
-
c00012참가자
- 글작성 : 17
- 답글작성 : 5
안녕하세요.
swift로 링크드리스트를 구현하려고 하는데 질문이 생겨 글 올립니다.
class로 링크드리스트를 구현하려고 다음과 같이 코드를 작성했습니다.
public class LinkedList<Value>{
public var head: Node<Value>?
public var tail: Node<Value>?
public init() {}
public var isEmpty:Bool{
head == nil
}
public mutating func push(value:Value){
head = Node(value: value, next: head)
if tail == nil{
tail = head
}
}
public mutating func append(value:Value){
guard !isEmpty else{
push(value:value)
return
}
tail!.next = Node(value: value)
tail = tail!.next
}
public func node(at index:Int)->Node<Value>?{
var currentNode = head
var currentIndex = 0
while currentNode != nil && currentIndex<index {
currentNode = currentNode!.next
currentIndex += 1
}
return currentNode
}
@discardableResult
public mutating func insert(value:Value, after node:Node<Value>)->Node<Value>{
guard tail !== node else{
append(value: value)
return tail!
}
node.next = Node(value: value,next:node.next)
return node.next!
}
@discardableResult
public mutating func insert(value:Value, before node:Node<Value>)->Node<Value>{
guard head !== node else{
append(value:value)
return head!
}
node.next = Node(value:value, next: node.next)
return node.next!
}
@discardableResult
public mutating func pop()->Value?{
defer{
head = head?.next
if isEmpty{
tail = nil
}
}
return head?.value
}
@discardableResult
public mutating func removeLast()->Value?{
guard let head = head else{
return nil
}
guard head.next != nil else{
return pop()
}
var prev = head
var current = head
while let next = current.next{
prev = current
current = next
}
prev.next = nil
tail = prev
return current.value
}
@discardableResult
public mutating func remove(after node: Node<Value>)->Value?{
defer{
if node.next === tail{
tail = node
}
node.next = node.next?.next
}
return node.next?.value
}
}
위와 같이 작성을 하고 컴파일을 돌려보니
‘mutating’ is not valid on instance methods in classes 라는 에러 메시지가 뜨는데, 이게 왜 이런 메시지가 뜨는 건지 설명 좀 부탁드립니다.
2023-08-17 오후 8:30 #59201
-
-
글쓴이글
- 답변은 로그인 후 가능합니다.