프로토콜 

: 최소한으로 가져야 할 속성. 정의만 함

 

* 프로토콜을 적용(Conform)시키면 프로토콜에 정의된 속성, 메서드를 모두 구현해야 함

* 프로토콜을 다른 프로토콜에 적용시킬 수도 있음

protocol Have {
    var student: String? { get }
    var what: String { get }
    
    func have()
}

struct Class: Have {
    var student: String?
    var what: String
    
    func have() {
        print("\(self.student) has \(self.what) class.")
    }
}

struct Club: Have {
    var student: String?
    var what: string
    
    func have() {
    print("\(self.student) is in \(what) club.")
    }
}

* CustomStringConvertible

public protocol CustomStringConvertible {
    /// A textual representation of `self`.
    public var description: String { get }
}

struct Student: CustomStringConvertible {
    var name: String
    var description: String {
        return "이름: \(self.name)"
    }
}

let student = Student(name: "ahhye")
print(student) //ahhye

 

 Any 

: Any는 모든 타입에 대응하고 AnyObject는 모든 객체에 대응함

* Any도 프로토콜

let num: Any = 5
let str: Any = "Hello World"
let obj: AnyObject = Student()

 

 

 

 타입 캐스팅(Type Casting) 

 

 다운 캐스팅(Down Casting) 

: as 를 이용해서 작은 범위로

* Any는 as? 로 옵셔널을 취해야 함

let num: Int? = anyNum as? Int

//옵셔널 바인딩
if let num = anyNum as? Int {
    print(num)
}

 

 타입 검사 

* is 를 사용

print(anyNum is Int) //true
print(anyNum is Any) //true

 

 

 

'iOS' 카테고리의 다른 글

[iOS/Swift] 9. 익스텐션(Extension)  (0) 2021.02.09
[iOS/Swift] 7. Enum(Enumeration)  (0) 2021.02.09
[iOS/Swift] 6. 튜플(Tuple)  (0) 2021.02.09
[iOS/Swift] 5. 클래스, 구조체  (0) 2021.02.09
[iOS/Swift] 4. 함수, 클로저  (0) 2021.02.08

+ Recent posts