관계가 있는 것들을 묶어서 표현함
Structure -> value types (새로운 인스턴스를 할당해서 사용함 copy)
Class -> reference types (참조됨)
ex)
편의점
class PersonClass {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
struct PersonStruct {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let pClass1 = PersonClass(name: "Jason", age: 5)
let pClass2 = pClass1
pClass2.name = "Hey"
pClass1.name // "Hey"
pClass2.name // "Hey"
var pStruct1 = PersonStruct(name: "Jason", age: 5)
var pStruct2 = pStruct1
pStruct2.name = "Hey"
pStruct1.name // "Jason"
pStruct2.name // "Hey"
struct Lecture {
var name: String
var instructor: String
var numOfStudents: Int
}
func printTeacher (_ instructor: String, lectures: [Lecture]) {
// 방법 1
var lectureName = ""
for lecture in lectures {
if instructor == lecture.instructor {
lectureName = lecture.name
}
}
// 방법 2 - closure 활용
let lectureName = lectures.first { (lec) -> Bool in
return lec.instructor == instructor
}?.name ?? "폐강"
print("아 그분 강의는 \(lectureName)입니다.")
}
let lec1 = Lecture(name: "한일관계사", instructor: "세키네 히데유키", numOfStudents: 30)
let lec2 = Lecture(name: "일본어강독", instructor: "탁성숙", numOfStudents: 50)
let lec3 = Lecture(name: "미디어일본어", instructor: "박진수", numOfStudents: 50)
let lectures = [lec1, lec2, lec3]
printTeacher("김두한", lectures: lectures)