Protocol

권현석·2022년 12월 26일
0
  • protocol은 이력서에 있는 certification과 같다.
  • protocol can be adopted by structure & class

defining protocol

protocol MyProtocol {
	// define requirements
}

adopting protocol

struct MyStruct: Myprotocol {}
class MyClass: Myprotocol {}
 protocol CanFly {

// protocol 메서드는 body가 없다(= fly메서드 다음에 '{}'가 오지 않는다. 그리고 implementation도 없다.)

	func fly() 
 }
 
 
//  class Eagle: 옆에 CanFly를 입력해 CanFly protocol의 fly 메서드를 실행시킨다.  

 class Eagle: Bird, CanFly {
 	 func fly() {
     	 print("The eagle flaps its wings lifts off into the sky.")
     }
 }
 
 
// penguin class는 Canfly protocol이 없어 fly에 대한 능력이 없다.  

class Penguin: Bird {
	func swim() {
    	print("The Penguin paddles through the water.")
    }
}


// flyingObject에 datatype으로 protocol인 CanFly를 할당한다. 그러면 FlyingMuseum이 flyingDemo 메서드를 실행할 때, CanFly protocol에 있는 메서드 fly를 실행하게 된다. 그러면 FlyingMuseum은 날지 못하는 것을 날게 할 필요가 없다. 

struct FlyingMuseum {
	func flyingDemo(flyingObject: CanFly) {
    	
    }
}

struct Airplane: CanFly  {
	func() {
    	 func fly() {
        	print("The airplane uses its engine to lift off into the air.")
        }
    }
}

let myEagle = Eagle()
let myPenguin = Penguin()
let myPlane = AirPlane
myEagle.fly()
myPlane.fly()


let museum = FlyingMuseum()
// myEagle이 CanFly protocol을 adopt하고 있기 때문에 가능하다. 
museum.flyingDemo(flyingObject: myEagle)

Delegate

  • delegate는 위임을 뜻한다.

UITextField

var = delegate: UITextfieldDelegate
delegate.textFieldBegunEditing()

Weather Veiw Controller

WeatherVeiwController: UITextFieldDelegate {
	let textField = UITextField()
    textField.delegate = self
	func textFieldDidBeginEditing() {
    	//do something
    }
}
protocol UITextFieldDelegate {
	func textFieldDidBeginEditing()
}

=> Weather Veiw Controller에서 UITextField를 initialise함
-> textField를 Weather Veiw Controller로 delegate함(이거 무슨 소리지?)
-> UITextField에서 protocol인 UITextFieldDelegate를 통해 이 protocol이 adopt된 Weather Veiw Controller에서 textFieldDidBeginEditing 메서드가 실행된다.

profile
wanna be an iOS developer

0개의 댓글