일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 책
- 애니메이션
- Deep learning
- 문자열
- RX
- stanford SwiftUI
- ios
- iOS SwiftUI
- wwdc
- Xcode
- objective-c
- 알고리즘
- swiftUI
- 독서
- Algorithm
- 스위프트UI
- 책 추천
- SWIFT
- ReactiveX
- string
- objc
- 책 후기
- 머신러닝
- swift5
- 스위프트
- Animation
- rxswift
- ARC
- leetcode
- 딥러닝
- Today
- Total
목록낑낑 (37)
THIS IS ELLIE
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을 수정해준다. ..
사실 넷플릭스와 같이 추천을 기반으로 사용자에게 콘텐츠를 제공해주는 시스템은 어떤 로직을 기반으로 처리되는지 궁금했다. 요즘 머신러닝을 배우고 싶어 책 한권을 구매한 책에서 추천을 생성하는 방법에 대해 소개해서 다시 정리하고 싶어 글을 쓴다. 책에서는 각 사용자 사이의 거리(유클리드 거리)를 구한 다음 이 거리를 유사도 지표로 사용해 원하는 데이터를 추론한다. 가장 비슷하지 않은 사용자들 사이의 값은 크고, 가장 비슷한 사용자들의 사이의 값은 작다. 유클리드 거리는 다차원 공간에서 점의 점 사이의 거리를 구하는 공식이다. (두 점 사이의 거리를 계산할 때, 두 점을 좌표로 표현하고 각각 대응하는 성분의 차의 제곱을 하여 더한 후 제곱근을 구하는 것) 만약 2차원 공간이 아니라 다차원이라면 벡터의 차원만큼..
소프트웨어는 어떻게 난수를 생성할까? 사실상 컴퓨터는 난수를 생성할 수 없다. 엄밀히 말하면 pseudorandom numbers를 생성하는 것이다. 난수는 수학적인 방법으로 진행된다. 위는 유사 난수를 위한 공식이다. 유사 난수(pseudorandom number)는 난수를 흉내내기 위해 알고리즘으로 생성되는 값을 가리킨다. 이때 유사 난수를 생성하는 알고리즘을 유사 난수 생성기(pseudorandom number generator, PRNG)로 부른다. 예를 들어 5를 넣는다고 가정한다. 5 * 8 = 40이고 을 11로 나눈 값은 7이다. 여기서 나온 결과 값을 다시 앞으로 보낸다. 그럼 7*8을 곱한 56을 11로 나눈 나머지인 1이 나온다. 위와 같이 결괏값을 앞으로 보내준다. 그러면 8을 11..
스위프트 스트링은 character의 집합으로 이루어진 유니코드 문자 값이다. 구조체로 스트링이 선언되어있다. String은 오브젝티브 씨의 NSString와 연결되며 문자열과 함께 동작하는 C 함수와의 상호 운용성을 제공한다. 문자열은 리터럴이나 문자열 보간을 사용해 새문자열을 만들 수 있다. 리터럴은 “” 따음표로 묶인 일련의 문자이다. 문자열 보간은 포함된 표현식을 평가하고 결과를 문자열 형식으로 변환하는 문자열 리터럴이다. 여러 줄 문자열 리터럴은 세 개의 큰 따옴표로 묶여 있으며 각 줄 바꿈 문자는 각각의 줄에 있다. 들여 쓰기는 닫는 구분 기호의 들여 쓰기와 일치하도록 여러 줄 문자열 리터럴의 각 줄에서 된다. 문자열 수정 및 비교 문자열은 사본을 수정하면 원래 문자열의 영향을 받지 않는다. ..
스위프트 데이터 구조와 알고리즘 책을 읽으며 알게 된 사실. 흔히 아는 퀵 정렬. 스위프트에서도 정렬 함수에 퀵 정렬이 사용된다. 그만큼 강력한 정렬이고 장점이 많다. 평균 시간복잡도는 O(nlogn)이다. 하지만 피봇 값에 따라 편향되게 분할될 가능성도 있어 최악의 경우 시간복잡도는 O(n^2)이다. 예를 들어 이미 정렬할 데이터가 정렬되어 있거나 역으로 정렬되어 있는 경우 피봇이 한쪽으로 치우쳐 N개의 원소를 피봇 기준으로 나누는 작업을 N번 실행하기 때문에 최악의 경우는 O(n^2)의 시간 복잡도를 가지기도 한다. 퀵 소트가 좋다고는 하지만 최악의 경우는 높은 성능을 기대하기도 어렵다. 이를 해결하기 위해서 개선된 방식으로는 피봇을 정하는 인덱스를 처음과 끝으로 고정시키지 않는다는 것이다. 그럼 이..
다 객체간의 소통을 할 수 있다는 공통점을 가진다. 세 패턴 모두 특정 이벤트가 일어나면 원하는 객체에 알려주어 해당되는 처리를 하는 방법을 가지고 있다. 하지만 한 객체는 그 자체로 존재하면서 소통하고 싶을 뿐 다른 객체에 종속되어 동작하는 것은 재사용성과 독립된 기능요소 측면에서 볼 때 바람직하지 않다. - 클로저 함수의 인자로 클로저가 들어가면 함수는 자신의 코드 내에서 언제든 자신의 인자인 클로저를 부를 수 있게 된다. 이런 구조를 활용하면 함수가 자신의 작업을 모두 완료된 후 클로저를 호출하도록 한다면 async에서 작업이 완료된 시점을 인식하고 처리할 수 있게 된다. - 델리게이트 대상 객체가 누군지 알 수 있을때 사용한다. MVC디자인 패턴 구조에서 View가 Controller에게 말을 걸..
WeatherAPI를 사용하는데 JSON에 timezone이 주어졌다. 나는 timezone을 가지고 현지 시간을 알아야 하는데 어떻게 해야 할지 감이 안잡혔다. timezone이 애초에 뭔지 모름. 그렇게 해서 찾게 된 timezone의 개념. timezone(시간대)은 영국의 그리니치 천문대를 기준으로 지역에 따른 시간의 차이이다. 지구의 자전에 따른 지역 사이에 생기는 낮과 밤의 차이를 인위적으로 조정하기 위해 고안된 시간의 구분선을 일컫는다. 시간대는 UTC를 기준으로한 상대적인 차이로 나타낸다. 아 그럼 나는 해당 지역의 시간 차이를 가지고 해당 지역의 시간대를 알수 있는거구나. 그럼 시간대 차이는 어떻게 되는거지 🤷♀️ 아래가 세계 시간대 차이를 나타낸 이미지다. 왼쪽 세계지도 아래에 나..