반응형
책의 예제 코드를 기반으로 프로토콜을 선언하고 확장하며, 프로토콜을 따르는 타입(클래스, 구조체)에서 사용하기까지에 대해 간단하게 나열을 한다.
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)
반응형
'프로그래밍 > Swift' 카테고리의 다른 글
Swift 패턴 이야기- 싱글턴 패턴(singleton) (0) | 2021.07.21 |
---|---|
Swift 제네릭 함수, 제네릭 타입 (0) | 2021.07.15 |
Swift 정규 표현식 규칙에 대한 이야기 (0) | 2021.07.14 |
extension Double - String 통화 기호(소수점 두 자리 반올림) (0) | 2021.07.14 |
Swift Protocol 정의 (0) | 2021.07.09 |