Extention


클래스 등을 확장한다.


상속이 수직적인 구조를 가졌다면, 확장은 수평적인 구조를 가진다.


주로 라이브러리 내에 포함된 클래스에 추가적인 메소드 등을 추가할 때 사용한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//
//  CMessage.swift
//  testSwift
//
//  Created by Eteris on 2018. 4. 20..
//  Copyright © 2018년 Eteris. All rights reserved.
//
 
import Foundation
 
class CMessage : SendMessageProtocol
{
    var messageTitle : String;
    var messageData : String;
    
    init (title : String, data : String, sendTime : String)
    {
        messageTitle = title;
        messageData = data;
        messageSendTime = sendTime;
    }
    
    // protocol 구현
    var messageSendTime : String;
    func sendMessage(title: String, data: String, time: String) {
//        NSLog("sendMessage title : %@ / data : %@ / time : %@", messageTitle, messageData, messageSendTime);
    }
    func sendMessage() {
        NSLog("sendMessage title : %@ / data : %@ / time : %@", messageTitle, messageData, messageSendTime);
    }
}
 
// 프로토콜 선언
protocol SendMessageProtocol
{
    var messageSendTime : String { get set };
    
    func sendMessage (title : String, data : String, time : String);
    func sendMessage (title : String, data : String, time : String-> String;
    func sendMessage ();
}
 
// 프로토콜 Extention
extension SendMessageProtocol
{
    func sendMessage (title : String, data : String, time : String-> String
    {
        return "EX";
    }
}
 
// Extention
extension CMessage
{
    func removeMessage (index : Int)
    {
        NSLog("Extention removeMessage Int : %d", index);
    }
}
 
cs


CMessage 클래스에 펑션을 추가한 모습이다.


프로토콜 역시 확장가능하며, 확장 시에는 저장 프로퍼티를 사용할 수 없다.


더불어 확장 프로토콜은 펑션을 구현해야 하는데, 이 경우엔 확장 프로토콜을 지키는 클래스에서는 구현하지 않아도 되는 모양이다.


구현하지 않을 경우 확장 프로토콜의 메소드를 그대로 사용하며, 재정의할 경우 재정의된 메소드가 사용된다.

'Developer > Swift' 카테고리의 다른 글

AlertDialog and Response Function  (0) 2018.05.02
pickerview with CustomView  (0) 2018.04.30
Extention  (0) 2018.04.20
Swift 각종 용어 정리 (지속 업데이트 필요)  (0) 2018.04.20
Protocol  (0) 2018.04.20
지정 생성자 (Initializer), 편의 생성자 (Convenience Initializer)  (0) 2018.04.13

이 글을 공유하기


댓글(0)

Designed by CMSFactory.NET