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 //["거북이", "토끼", "강아지"]
반응형