프로토콜
: 최소한으로 가져야 할 속성. 정의만 함
* 프로토콜을 적용(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 |