associatedtype 을 통해 제네릭으로 어떠한 자료형이든 가질수 있다
Protocol
애완동물 관련 프로토콜
protocol PetHaving {
associatedtype T
// 애완동물 배열
var pets: [T] { get set }
// mutating을 통해 스트럭트에서 멤버 변수 값변경
mutating func gotNewPet(_ newPet: T)
}
※ mutating - 포스트 바로가기
Extension
익스텐션으로 프로토콜의 메소드 로직 구성
extension PetHaving {
mutating func gotNewPet(_ newPet: T) {
self.pets.append(newPet)
}
}
Enum
enum Animal {
case cat, dog, bird
}
Struct
Friend
애완동물 프로토콜을 임플레먼트하는 친구 스트럭트
struct Friend : PetHaving {
// 배열의 자료형이 Animal 이넘으로 사용 가능
var pets = [Animal]()
// var pets: [Animal] = []
}
Family
애완동물 프로토콜을 임플레먼트하는 가족 스트럭트
struct Family : PetHaving {
// 배열의 자료형이 문자열
var pets = [String]()
// var pets: [String] = []
}
배열넣기
var myFriend = Friend()
myFriend.gotNewPet(Animal.bird)
myFriend.gotNewPet(Animal.cat)
myFriend.gotNewPet(Animal.dog)
myFriend.pets
// [bird, cat, dog]
var myFamily = Family()
myFamily.gotNewPet("거북이")
myFamily.gotNewPet("토끼")
myFamily.gotNewPet("강아지")
myFamily.pets
//["거북이", "토끼", "강아지"]
반응형