Swift

Swift - mutating

iosos 2023. 8. 22. 21:43

mutating

- 구조체(struct), 열거형(enum) 내부의 메서드가 해당 인스턴스의 속성을 변경할 수 있도록 허용하는 데 사용

 

구조체와 열거형은 값 타입!!

클래스는 참조 타입이므로 클래스의 메서드는 기본적으로 속성을 수정할 수 있음

그러나 값 타입인 구조체와 열거형은 메서드에서 인스턴스의 속성을 변경할 때는 'mutating' 키워드를 사용해야 함!

 

 


Class의 메서드 내 프로퍼티 변경

import UIKit

class Friend {
    var name : String
    
    // class의 프로퍼티의 name 값을 변경하는 메서드
    func changeName(newName : String){
        self.name = newName
    }
    
    init(_ name : String){
        self.name = name
    }
}

var myFriend = Friend("홍길동")
myFriend.changeName(newName: "김길동")
print(myFriend.name)    // 김길동

- 'Friend' 클래스 내 'name' 프로퍼티를 수정하는 'changeName' 메서드를 생성 

- class를 사용할 때는 'init()' 메서드(생성자)가 존재해야 함 

- 'myFriend' 의 'name' 속성을 '홍길동' 에서 '김길동' 으로 변경 

 

클래스는 참조 타입이기 때문에 메서드 내에서 프로퍼티 수정 가능 

 

 

 


Struct의 메서드 내 프로퍼티 변경 

'Cannot assign to property: 'self' is immutable' : 속성에 할당할 수 없습니다. 'self'는 변경할 수 없습니다.

→ 구조체와 열거형은 값 타입! 값 타입은 인스턴스 메서드 내에서 프로퍼티들을 수정할 수 없음.  'mutating' 키워드 사용!

 

import UIKit

struct Friend {
    var name : String
    
    // class의 프로퍼티의 name 값을 변경하는 메서드
    mutating func changeName(newName : String){
        self.name = newName
    }
}

var myFriend = Friend(name: "홍길동")
myFriend.changeName(newName: "김길동")
print(myFriend.name)    // 김길동

- 'mutating' 키워드를 사용하여 메서드 내에서 프로퍼티 값 변경 가능 

 

 

 

 

참고)

https://www.youtube.com/watch?v=0cZJlo6Pga4 

 

https://velog.io/@wook4506/iOS-Swift-Swift-%EB%AC%B8%EB%B2%95%EC%9D%84-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-18%ED%8E%B8-mutating

'Swift' 카테고리의 다른 글

Swift - Extension (확장)  (0) 2023.08.24
Swift - Class, Struct, Enum  (0) 2023.08.23
Swift - DispatchQueue  (0) 2023.08.22
Swift - UserDefaults  (0) 2023.08.16
Swift - 키보드 올라옴 감지(NotificationCenter, Observer 사용)  (0) 2023.08.11