일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 커스텀 뷰
- 부트캠프
- 코코아 인터널스
- notion
- IOS
- 단위 테스트
- rxswift
- 개발
- SwiftUI
- Design Pattern
- 네이버 부캠
- Tistory
- Opensource
- WWDC
- World
- Algorithm
- OS
- 알고리즘
- 디자인패턴
- 부스트캠프
- boostcamp
- development
- Hello
- Cocoa Internals
- 후기
- Swift
- Today
- Total
목록Programming/Swift (6)
꿈돌이랜드
Result연관 값을 포함한 success 또는 failure를 나타낼 수 있는 타입제네릭 enum 타입으로 선언되어있다. Failure는 반드시 Error 프로토콜을 채택한 타입이어야 합니다.@frozen enum Result where Failure : Error어떤 동작의 수행결과(대표적으로 네트워킹)를 success인지 failure인지 구분해서 나타낼 수 있습니다.case로 success와 result를 가지고, 각 case의 연관값으로 제네릭타입의 넣어준 값을 저장합니다. Result의 쓰임 예시는 아래 아티클을 참조해주세요Writing Failable Asynchronous APIs오류를 동기식으로 반환하지 못할 때, API의 일부로 Result를 반환하는 것을 제안합니다.→ API의 실행 ..
Swift Array’s Shuffle()스위프트 배열에는 요소들을 뒤섞어주는 shuffle() 메서드가 존재합니다.var names = ["Alejandro", "Camila", "Diego", "Luciana", "Luis", "Sofía"] names.shuffle() // names == ["Luis", "Camila", "Luciana", "Sofía", "Alejandro", "Diego"]공식 문서에서는 RandomAccessCollection 프로토콜을 채택한 인스턴스가 사용할 수 있다고 합니다. WWDC 2018에서, 이런 셔플 알고리즘은 Fisher-Yates 알고리즘을 사용해 구현했다고 합니다.https://developer.apple.com/videos/play/wwdc2018/40..
Swift5.7 RegexSwift 5.7 이후, Swift 언어에서 정규 표현식 사용 방법이 업데이트 되었습니다. 이를 정리해보도록 하겠습니다. Swift 5.7 이전, 정규표현식을 사용하려면 다음의 것들을 사용했어야 했습니다.NSRegularExpressionNSString의 메서드 range(), replacingOccurrences() … 다음은 예시 코드 입니다.문자열 일부 일치 확인import Foundation let str = "abcd1234" let pattern = "[0-9]*" if let range = str.range(of: pattern, options: .regularExpression) { print(str[range]) // 가장 앞 부분 부터 일치하는 부분을 반환 } ..
스위프트의 구조체는 여타의 C 기반 언어의 구조체에 비해 훨씬 강력하다. 그런데 클래스는 그러면 언제 사용해야 할까?애플의 Swift Programming Language Guide에서는 다음과 같이 제시하고 있다기본적으로는 구조체를 사용하라.Swift의 구조체는 다른 언어의 클래스로 취급될 정도의 많은 기능을 포함한다.예를 들면, stored property, computed property, method 등이 있다.게다가, 프로토콜을 채택할 수 있다.구조체는 value 타입이기 때문에 앱의 상태를 고려할 필요가 없다.Objective-C 와의 상호작용이 필요할 때는 클래스를 사용하라.데이터를 처리해야 하는 Objective-C API를 사용하거나 프레임워크에 정의된 기존 클래스 계층에 맞춰야 하는 경..
Target Action우리는 흔히 UIKit를 이용하여 개발할 때 버튼이나 여러 요소들의 사용자 이벤트를 처리하기 위해 Target Action 디자인패턴의 원리를 이용해 다음과 같은 코드를 사용한다.let button = UIButton() button.addTarget(self, action: #selector(touchUpButton(_:)), event: .touchUpInside) @objc func touchUpButton(_ sender: UIButton) { //... } 헌데 실제로 어떻게 프로그램의 런타임에서 action이 실행될 수 있는 것일까? 그 원리를 알아보고자 한다.Dispatch우선 Dispatch의 개념을 알아야 한다.많은 객체지향 언어들이 상속을 통해 메소드와 프로퍼티들..
스위프트에서 리스트를 뒤집는 것은 Swift Standard Library의 .reversed() 를 활용할 수 있다. 놀랍게도 이 메서드는 시간복잡도가 O(1)이다. 왜냐하면 이건 lazy이고, 원래 컬렉션을 거꾸로 뒤집는 뷰를 생성하기만 하기 때문이다. 정확히 말하자면 ReverseCollection이라는 래핑객체를 반환한다. 따라서 우리는 O(n) 시간 복잡도로 리스트를 순회할 수 있게된다. 하지만 이것을 인덱스로 접근하면 O(1)이라는 시간복잡도를 잃게된다. let arr = [1, 2, 3, 4] let i = arr.reversed()[1] // lose O(1) efficiency. 먼저 알아둘 것은, reversed() 메서드는 구체적으로 다음 두가지 정의 중에 선택하여 오버로드 된다는 점..