문자열을 결합하는 방법은 문자열 보간을 사용하는 방법과 +를 사용해 문자열을 결합하는 방법이 있습니다. 먼저 문자열 보간은 문자열 안에 변수와 상수를 결합하는 것입니다. 사용하는 방법은 아래와 같이 \( ) 백 슬래시, 열린 괄호, 닫는 괄호를 사용합니다. var name = "Ellie" "My name is \(name)" 그리고 다른 방법으로는 +를 사용해 문자열을 결합하는 방법입니다. var name = "Ellie" "My name is " + name 위와 같이 문자열을 결합할 수 있지만 문자열 보간이 더 효율적인 상황이 있습니다. 바로 여러 변수를 함께 결합해서 사용하는 경우입니다. 스위프트의 문자열 보간은 다양한 데이터 타입을 자동으로 처리할 수 있습니다. var name = "Ellie"..
스위프트5에서 정수를 문자열로 변환하는 방법은 아래와 같습니다. 첫 번째 방법은 문자열 보간으로 \( )를 사용하는 방법과 두 번째 방법은 문자열 이니셜 라이저를 사용하는 방법이 있습니다. 위와 같은 방법으로 사용하면 문자열 그대로 사용 가능합니다. 하지만 반대의 경우는 다릅니다. 스위프트5에서 문자열을 정수로 변환하는 방법은 아래와 같습니다. 문자열 안에 정수가 숨겨져 있다면 정수 이니셜 라이저를 사용해 다음과 같이 둘 사이를 변환할 수 있습니다. 문자열 10은 당연히 숫자 10으로 변환 가능하지만 옵셔널을 리턴하는 것을 확인할 수 있습니다. 왜냐하면 문자열에 숫자가 아닌 것을 포함할 수 있기 때문입니다. 아래와 같이 ab를 정수로 변환하는 것을 불가능합니다. 그래서 정수 이니셜 라이저는 옵셔널 정수를..
map(), compactMap(), flatMap() 모두 비슷하게 들리지만, 다르게 사용되어 정리해보려 합니다. 세 단어 모두 map이라는 단어를 포함하고 이는 어떤 것에서 다른 것으로 변환한다는 의미로 사용됩니다. 먼저 map을 살펴보겠습니다. numbers의 정수를 두배를 해주는 작업을 해봅니다. let numbers = [1, 2, 3, 4, 5] let doubled = numbers.map { $0 * 2 } numbers배열의 각 값을 가져와 클로저를 통해 실행합니다. 여기서 $0는 numbers의 각 숫자를 나타냅니다. 따라서 1,2,3,4,5 각각에 2를 곱해주는 것입니다. 이 경우 배열에서 숫자를 가져와 두 배로 늘리고 새 배열에 다시 넣는 것을 의미합니다. doubled에는 1,2,..
문자열에 " " , "-"값이 포함될 수 있으며 이것을 무시하고 숫자만 필터링해내는 작업을 처리해줘야 했습니다. 예를 들어 "010-1111-2222"인 문자열이 들어오면 "01011112222"와 같이 숫자만 뽑아내고 "010 1111 2222"인 문자열이 들어오면 이 또한 "01011112222"로 숫자만 뽑아내야 합니다. replacingOccurrences(of: with:) 처음에는 문자열 바꿔치기에 자주 사용했던 replacingOccurrences(of: with:) 메소드를 사용해 " "그리고 "-"값을 빈칸으로 만들어 주도록 했습니다. let filterStr = originalStr.replacingOccurrences(of: " ", with: "").replacingOccurrenc..
제네릭은 스위프트에서 가장 강력한 기능 중 하나로 스위프트의 표준 라이브러리는 대부분 제네릭 코드로 만들어졌습니다. 스위프트에 제네릭이 없었으면 어떨까요 위와 같이 버퍼 구조체가 있다고 가정합시다. 각 요소를 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은 ..
프로그램이 도중 정수형 숫자 타입을 할당하긴 해야 하는데 정확히 어떤 타입인지 알 수 없는 경우, numericCast 함수를 호출해서 스위프트가 동적으로 숫자 타입을 통일할 수 있습니다. 기존 코드에서 서로 다른 정수형 타입으로 선언한 변수 i와 변수 j가 있는 경우, i = numericCast(j) 코드를 실행하면 변수 j의 정수형 타입이 변수 i의 타입에 맞춰지게 됩니다. 예를 들어, i는 Int16, j는 Int32 서로 다른 정수형 타입으로 i와 j를 선언했습니다. 그리고 j를 변경해주려 하면 작성한 부분에서 에러가 발생하게 됩니다. Cannot assign value of type 'Int16' to type 'Int32' Replace 'i' with 'Int32(i)' 에러 메세지는 In..
배열에서 중복된 Element를 제거하는 방법에는 여러 방법이 있겠지만 쉬운 방법은 딕셔너리를 활용하는 것 입니다. 간단히 배열을 extension 시켜줍니다. 저기서 주목해줄 건 updateValue가 리턴을 한다는 것입니다. 키가 이미 있으면 OriginalValue를 리턴하고, 키가 없으면 nil을 리턴한다. 예를 들어보겠습니다. array배열에는 1, 4, 4, 4, 5, 1, 3로 1과 4가 중복되네요. 원하는 결과물은 1,4,5,3 즉 중복되는 요소는 제거하고 유니크한 값만 뽑아내고 싶습니다. 먼저 딕셔너리(dict)를 만들어 key와 value를 업데이트해줍니다. key는 각각의 요소 1, 4, 4, 4, 5, 1, 3 가 되겠네요. 앞서 말한 대로 키가 이미 있으면 OriginalValue..
- Total
- Today
- Yesterday
- 애니메이션
- RX
- 머신러닝
- objc
- 독서
- Algorithm
- 알고리즘
- SWIFT
- ARC
- 딥러닝
- 문자열
- 책
- swiftUI
- 스위프트
- ReactiveX
- objective-c
- swift5
- Xcode
- rxswift
- ios
- stanford SwiftUI
- string
- 책 후기
- Deep learning
- leetcode
- 책 추천
- 스위프트UI
- iOS SwiftUI
- wwdc
- Animation
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |