본문 바로가기
반응형

프로그래밍/Swift51

Swift Protocol Extension 예제와 사용 절차 책의 예제 코드를 기반으로 프로토콜을 선언하고 확장하며, 프로토콜을 따르는 타입(클래스, 구조체)에서 사용하기까지에 대해 간단하게 나열을 한다. 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: Str.. 2021. 7. 14.
Swift 정규 표현식 규칙에 대한 이야기 정규식 abc 의 경우 xyzabcxyzbc 일 때 문자열 abc와 일치한다. 정규식 12345의 경우 1234567890에서 문자열 12345와 일치한다. 꺽쇠 괄호 ([])를 사용하면 문자 집합(character sets)을 정의할 수도 있다. 문자 집합은 집한 안에 있는 문자와 문자열에 있는 하나의 문자와 일치할 것이다. 집합을 정의하기 위해서는 문자열을 사용하거나 범위를 명시하기 위해 - (마이너스 기호) 연산자를 사용할 수 있다. 정규식 [abc] 의 경우 xyzabcxyz 에서 abc집합에 있는 문자와 일치한다. 정규식 [a-zA-Z]의 경우 xyzabcxyz에서 소문자 또는 대문자에 일치한다. 반복 횟수를 명시하기 위해서는 중괄호({})를 사용해 하나 이상의 문자를 일치시킬 수 있다. {2,.. 2021. 7. 14.
extension Double - String 통화 기호(소수점 두 자리 반올림) 제목의 요약과 같이 double값을 통화를 나타내는 값인 String타입으로 변환하는 메소드를 추가하기 위해 Double 타입을 확장하는 예제. 이 메서드는 소수점 두 자리로 반올림하고 통화 기호를 추가하는 예제. extension Double { func currencyString() -> String { let divisor = pow(10.0, 2.0) let num = round(self * divisor).rounded() //제수 return "$\(num)" } } 확장에는 저장 프로퍼티를 추가할 수 없지만, 연산 프로퍼티는 추가할 수 있다. extension Int { var squared: Int { return self * self } } 정수를 제곱한 값을 얻기 위해 연산 프로퍼티로 .. 2021. 7. 14.
Swift Protocol 정의 나는 좀 더 공부를 해보기로 했다. 그 내용이 무엇이던지간에 좀 더 파보기로 했다. 스위프트에서 프로토콜을 정의하는 방법은 다음과 같다. protocol MyProtocol { //프로토콜 정의는 여기에... } protocol 키워드를 사용하며, 그 다음으로 프로토콜 이름이 위치한다. 커스텀 타입은 타입 이름 뒤에 콜론으로 구분해 프로토콜의 이름을 위치시킴으로써 해당 타입이 따르는 특정 프로토콜을 나타낼 수 있다. -> 즉 계약의 역할, 구현할 것을 약속하는 것이다. struct MyStruct: MyProtocol { //구조체 구현체는 여기에 위치한다. } 타입은 다중 프로토콜을 따를 수 있다. 다중 프로토콜은 콜론으로 구분해 열거하면 된다. struct MyStruct: MyProtocol, An.. 2021. 7. 9.
UILabel Size Animation With layer.anchorPoint UILabel의 font사이즈를 줄이는 애니메이션은 일반적인 UIView애니메이션으로 한계가 있는 듯 하다. UILabel의 스케일을 줄이면서 앵커포인트를 맞추면서 좌측 정렬상태에서 늘어나고 줄어드는 예제 코드인데 내 경험으로 판단할 때 오토레이아웃이 잡힌 경우라면 Constraint를 잘 설정해주어야 할 것 같고 그러지 않을 경우는 아예 제약을 다 클리어 한다음에 애니메이션 행위에 집중하는 것이 좋을 것 같다. 소스는 간단하다. self.lblName.sizeToFit() self.lblName.layer.anchorPoint = CGPoint(x: 0, y: 0) self.lblName.layer.position = CGPoint(x: 14, y: 8) UIView.animate(withDuratio.. 2021. 7. 5.
@escaping 뭔지도 모르고 엄청 썼군... ㅋㅋ 함수의 전달인자로 전달한 클로저가 함수 종료 후에 호출될 때 클로저가 함수를 탈출(Escape)한다고 표현. 클로저를 매개변수로 갖는 함수를 선언할 때 매개변수 이름의 콜론(:) 뒤에 @escaping키워드를 사용하여 클로저가 탈출하는 것을 허용한다고 명시. //@escaping 예시 func requestSchoolGroupList(code: String, completionHandler:@escaping Result) { 비동기 작업을 실행하는 함수들은 클로저를 컴플리션 핸들러(Completion handler)전달인자로 받는데 비동기 작업으로 함수가 종료되고 난 후 호출할 필요가 있는 클로저를 사용해야 할 때 탈출 클로저(Escaping Closure)가 필요하다.. 2020. 11. 12.
반응형