YoutuberStruct 이름을 String , Int로 저장하는 구조체를 만들었다. 구조체 내부의 변수를 프로퍼티라고 하므로 속성이 두개인 구조체이다. 이제 인스턴스를 만들고 사용할 수 있다.
구조체를 정의하고 인스턴스를 생성하고 초기화 할때는 멤버와이즈 이니셜라이저 를 사용한다. 구조체의 프로퍼티 이름으로 자동으로 저장된다.
struct character {
var name: String
var isfavorite: Bool
}
var myCharacter: character = character(name: "포뇨", isfavorite: true)
myCharacter.name = "소피아"
myCharacter.isfavorite = false
print(myCharacter) //character(name: "소피아", isfavorite: false)
struct Sport {
var name: String
var isOlympicSport: Bool
var olympicStatus: String {
if isOlympicSport {
return "\(name) is an Olympic sport"
} else {
return "\(name) is not an Olympic sport"
}
}
}
만약 isOlympicSport
가 true
이거나 false
일 때 값을 반환하도록 저장할 수도 있다.
let chessBoxing = Sport(name: "chessBoxing", isOlympicSport: true)
print(chessBoxing.olympicStatus)
struct Code {
var language: String
var containsErrors = false
var report: String {
if containsErrors {
return "This \(language) code has bugs!"
} else {
return "This looks good to me."
}
}
}
let Korean = Code(language: "Korean", containsErrors: true)
print(Korean.report)
*꼭 return(반환)을 해줘야한다.(안그러면 에러 발생함.)
구조체는 Class와 달리 다른 종이에 복사한 것과 같다. 그렇기 때문에 복사본을 훼손하거나 변경을 해도 원본에는 영향을 미치지 않는다!
15번째 줄
까지는 값을 복사하기 전
이기 때문에 그대로 "정대리"
가 출력이 되지만 그 이후, 복사한 후
에는 원본과 사본의 값이 다르게 출력
이 되는 걸 볼 수 있다.