URL 스트링에 한글이나 공백 때문에 인식이 안되서 URL(string: )을 하면 nil이 되는 경우가 있다. 이 경우에는 한글을 인코딩해주어 URL을 보내야한다. 스위프트에서 NSString의 인스턴스 메서드인 addingPercentEncoding(withAllowedCharacters:)를 사용할 수 있다. 이 메서드가 하는 일은 지정된 세트에 없는 모든 문자를 퍼센트로 인코딩 된 문자로 바꾸어 새로운 문자열을 반환해주는 함수이다. 퍼센트 인코딩이란 URL 관련해 특정 의미 있는 문자를 인코딩하는 메커니즘이며, URL 인코딩이라고도 한다. % 뒤에 대체 문자의 ASCII 값을 16진수로 표시한다. 파라미터인 allowedCharacters로 사전 정의된 세트 중 하나를 지정해서 전달한다. 여기서 ..
Info.plist파일을 옮기게 되면 에러가 발생한다. 에러 내용은 Build input file cannot be found 말 그대로 빌드 입력 파일을 찾을 수 없다는 의미다. 에러가 발생하는 이유는 프로젝트를 생성하면 자동적으로 Xcode 최상위에 Info.plist파일을 생성하는데, 내가 그것을 하위 폴더로 옮겼기 때문에 찾을 수 없게 되고 에러가 발생한다. 그럼 Info.plist가 어디에 있는지 정확하게 알려주면 된다. 프로젝트 TARGETS의 BuildSettings에서 infoplist라고 키워드를 검색한다. 그러면 아래와 같이 키워드infoplist에 관련된 항목들이 뜬다. 그중에서도 나는 Info.plist파일의 위치를 알려주고 싶은 거니까. Info.plist File을 수정해준다. ..
Embedding and Sharing Visually Rich Links WWDC 2019에 Embedding and Sharing Visually Rich Links를 보고 사용해보고 싶다 생각이 들었다. 먼저 이 세션은 LinkPresentation에 대해서 설명하고 소개한다. LinkPresentation 프레임 워크를 통해 앱 개발자는 풍부하고 아름답고 일관된 방식으로 URL을 쉽게 제시할 수 있으며, LinkPresentation을 사용하여 URL에서 메타 데이터를 검색하고 앱 내부에 풍부한 링크 컨텐츠를 제공할 수 있다. 사실 흥미를 가진 이유는 이전에 프로젝트를 하며 또 과제를 수행하며 이런 TableViewCell을 만든 기억이 난다. 링크에 대한 프리뷰는 아니지만 LPLinkView와 ..
문자열에 " " , "-"값이 포함될 수 있으며 이것을 무시하고 숫자만 필터링해내는 작업을 처리해줘야 했습니다. 예를 들어 "010-1111-2222"인 문자열이 들어오면 "01011112222"와 같이 숫자만 뽑아내고 "010 1111 2222"인 문자열이 들어오면 이 또한 "01011112222"로 숫자만 뽑아내야 합니다. replacingOccurrences(of: with:) 처음에는 문자열 바꿔치기에 자주 사용했던 replacingOccurrences(of: with:) 메소드를 사용해 " "그리고 "-"값을 빈칸으로 만들어 주도록 했습니다. let filterStr = originalStr.replacingOccurrences(of: " ", with: "").replacingOccurrenc..
전화번호부에서 이름을 검색할 때 이진 탐색을 사용한다. 이전 프로젝트에서도 전화번호부에서 이름을 검색해야 했는데 배열의 처음부터 다 매칭 해보는 방법을 사용해 O(n)의 시간 복잡도를 가졌습니다. 그때 이진 탐색을 사용했더라면 O(logn)의 시간 복잡도를 가져 배열이 길수록 훨씬 더 효율적으로 검색할 수 있었겠죠. ㅠ_ㅠ 사실 이진 탐색 알고리즘이 무엇인지는 학교에서 배워서 대충은 알고 있었으나 실전에서 이렇게 사용되는지는 와 닿지 않았습니다. 그래서 이번 기회에 이진 탐색 알고리즘을 학습하고 정리하려 합니다. 먼저 이진 탐색 알고리즘의 조건은 데이터가 정렬되어 있어야 합니다. 스위프트로 작성한 코드를 봅시다. 중간 인덱스를 찾아서 중간 인덱스의 값이랑 비교를 합니다. 중간 인덱스 값과 내가 원하는 값..
제네릭은 스위프트에서 가장 강력한 기능 중 하나로 스위프트의 표준 라이브러리는 대부분 제네릭 코드로 만들어졌습니다. 스위프트에 제네릭이 없었으면 어떨까요 위와 같이 버퍼 구조체가 있다고 가정합시다. 각 요소를 index로 가져오는 방법이 있지만 리턴 타입을 무엇으로 만들어야 할까요 제네릭이 없다면 우리가 버퍼에 넣고 싶은 것을 표현할 수 있는 타입인 Any로 넣어야 합니다. // Any는 함수 타입을 포함하여 모든 타입의 인스턴스를 나타낼 수 있습니다. 하지만 Any로 넣게 되면 꺼내서 사용할 때 다른 타입일 수 있어 오류가 발생하기 쉽습니다. 예를 들어 위와 같이 문자열 버퍼에 정수를 넣으면 안 되겠죠. 그럼 메모리에는 어떻게 표현될까요. 우리가 원하는 메모리 모습은 하늘색 박스와 같은 모양입니다. 문..
스위프트의 정렬 sort와 sorted 차이점에 대해서 알아보려 합니다. 먼저 sort 함수를 살펴봅시다. sort는 (in place) 제자리에서 정렬합니다. 또한 각 Element가 Comparable 프로토콜을 따라야 정렬할 수 있습니다. 기본적으로 sort는 오름차순으로 정렬됩니다. 내림차순으로 정렬하고 싶으면 sort(by: ) 함수를 활용해서 sort(by: >)로 작성해주면 됩니다. var arr = [3,35,5,32,1] arr.sort() print(arr) // [1, 3, 5, 32, 35] arr.sort(by: >) print(arr) // [35, 32, 5, 3, 1] 제자리에서 정렬하기 때문에 어떠한 배열을 리턴하지 않습니다. 시간 복잡도는 O(nlogn)을 나타내고 n은 ..
퀵 정렬은 pivot을 기준으로 큰 숫자와 작은 숫자를 나누어줍니다. 코드를 살펴봅시다. pivot을 array의 중간인 array.count / 2로 잡아주고 less는 pivot보다 작은 것 equal은 pivot이랑 같은 것 greater은 pivot보다 큰 것들로 나누어줍니다. 각 less, equal, greater은 스위프트의 고차함수filter를 사용해줍니다. 간단하게 나뉘는 흐름을 살펴봅니다. array의 count가 1보다 작으면 return해주고 less, equal, greater을 분리하면 최종적으로 정렬된 배열을 얻을 수 있습니다. 단점은 피봇 값에 따라 편향되게 분할될 가능성도 있습니다. 예를들어 이미 정렬할 데이터가 정렬되어 있거나 역으로 정렬되어 있는경우 피봇이 한쪽으로 치우..
- Total
- Today
- Yesterday
- 딥러닝
- stanford SwiftUI
- 책 추천
- SWIFT
- ios
- rxswift
- 머신러닝
- 스위프트
- RX
- Algorithm
- 책 후기
- 문자열
- Animation
- swift5
- ARC
- leetcode
- iOS SwiftUI
- Deep learning
- ReactiveX
- 애니메이션
- Xcode
- string
- 책
- wwdc
- objc
- swiftUI
- objective-c
- 스위프트UI
- 독서
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |