본문 바로가기
프로그래밍/Swift

Swift Protocol Extension 예제와 사용 절차

by Mr-후 2021. 7. 14.
반응형

책의 예제 코드를 기반으로 프로토콜을 선언하고 확장하며, 프로토콜을 따르는 타입(클래스, 구조체)에서 사용하기까지에 대해 간단하게 나열을 한다. 

 

protocol TextValidation {
	var regExFindMatchString: String {get}
    var validationMessage: String {get}
}

protocol을 정의하면서 프로퍼티 2개를 정의했다. 

다음은 프로토콜을 확장하면서 1개의 연산프로퍼티와 2개의 메서드를 확장(추가) 정의한다. 

 

extension TextValidation {
	var regExMatchingString: String {
    	get {
        	return regExFindMatchString + "$"
		}
	}
    
    func validateString(str: String) -> Bool {
    	if let _ = str.range(of: regExMatchingString, options: .regularExpression) {
        	return true
        } else {
        	return false
        }
    }
    
    func getMatchingString(str: String) -> String? { 
    	if let newMatch = str.range(of: regExFindMatchString, options: .regularExpression) {
        	return str.substring(with: newMatch)
        } else {
        	return nil
        }
    }
}

프로토콜과 프로토콜 확장을 생성했으니 이제 문장 유효성 타입을 정의 한다. 

 

class AlphabeticValidation: TextValidation {
	static let sharedInstance = AlphabeticValidation()
    
    private init() {}
    
    let regExFindMatchString = "^[a-zA-Z]{0,10}" 
    let validationMessage = "Can only contain Alpha characters" 
}

/**
* 정적 상수(static constant)와 프라이빗 생성자(private initiator)를 생성했기 때문에 
* 이러한 클래스는 싱글턴(singleton)으로 사용할 수 있다. 
*/

각 타입(클래스)에서 해야 하는 일은 regExFindMatchString프로퍼티와 validationMesage프로퍼티를 위한 값을 설정하는 것. 

이 유효성 클래스는 다음과 같이 사용한다. 

 

var myString1 = "abcxyz"
var myString2 = "abc123"

var validation = AlphabeticValidation.sharedInstance
validation.validateString(str: myString1) 

validation.getMatchingString(str: myString1)
반응형