본문 바로가기
Mobile/Swift

struct

by 꼰대코더 2024. 2. 15.

내부 변수를 변경하는 메서드를 포함하지 않는 struct 

struct Song {
    let title: String
    let singer: String
    let year: Int

    func printLyrics() {
          print("bla bla blar ...")
    }
let song1 = Song(title: "Friend", artist: "Taylor Swift", year: 2012)
let wings = Song(title: "Wings", artist: "BTS", year: 2016)

print(song1.title)
print(wings.artist)

song1.printLyrics()
wings.printLyrics()

 

내부 변수를 변경하는 메서드를 포함하는 struct 

struct Song {
    let title: String
    let singer: String
    var year: Int

    func changeYear(newYear: Int) {
          year = newYear
    }
}
build 에러 발생
-> changeYear 에서 맴버 변수를 변경하려 하기에
struct Song {
    let title: String
    let singer: String
    var year: Int

    mutating func changeYear(year: Int) {
          self.year = year
    }
}
mutating 키워드로 문제해결
파라미터와 멤버 변수의 이름이 같을 경우 멤버변수에 반드시 self 추가
struct Song {
    let title: String
    let singer: String
    private var year: Int

    mutating func changeYear(year: Int) {
          self.year = year
    }
}
private 외부에서 멤버 변수를 액세스를 제한하고자 하는 경우
struct School {
    static var studentCount = 0


    static func add(student: String) {
        print("\(student) joined the school.")
        studentCount += 1
    }
}
static 멤버 변수, 메서드의 액세스
-> School.add(student: "Taylor Swift")
-> print(School.studentCount)

School 의 모든 인스턴스는 값을 공유하게 된다.

 

 struct 가 인스턴스(선언)화 될시에는 모든 멤버 변수는 값을 가지고 있어야 한다.

struct Employee {
    var name: String
    var yearsActive = 0
}
let roslin = Employee(name: "Laura Roslin")
let adama = Employee(name: "William Adama", yearsActive: 45)

 

이니셜라이져 정의

struct Employee {
    var name: String
    var yearsActive = 0

    init() {
        self.name = "Anonymous"
    }
}
더이상 아래와 같은 초기화는 불가
let roslin = Employee(name: "Laura Roslin")

아래는 OK
let roslin = Employee()

 

'Mobile > Swift' 카테고리의 다른 글

class  (0) 2024.02.15
예외처리  (0) 2024.02.14
function  (0) 2024.02.14
Loops  (0) 2024.02.14
switch  (0) 2024.02.14