본문 바로가기

분류 전체보기179

API 사이트 모음 (상시 업데이트) https://www.weatherbit.io/ Weatherbit | Weather API - Historical Weather API Simple. Powerful. Reliable. Getting access to weather data or historical weather data has never been easier. Unparalleled Forecast Accuracy We leverage the power of forecast models, and machine learning to deliver the most accurate weather forecast API on www.weatherbit.io 가입해서 free plan으로 사용하면 제한된 횟수 안에서 국가, 지역의 날씨 API.. 2020. 10. 12.
[leetCode] 152. Maximum Product Subarray 카단 알고리즘의 변형 저번 leetCode에서 풀었던 Maximum Subarray와 비슷한 문제이다. 때문에 기존에 익혔던 카단 알고리즘을 사용하면 되지만 변수가 존재한다. Product는 곱으로서 음수와 음수의 곱은 양수가 되고 양수에 음수를 곱하게 되면 음수가 되기 때문에 이 경우의 수를 대비하여 최대 값을 구해 주어야 한다. 카단 알고리즘은 쉽게 말하면 현재 값으로만 이루어진 어레이와 이전 어레이+현재값으로 이루어진 서브 어레이의 비교라고 할 수 있다. class Solution { func maxProduct(_ nums: [Int]) -> Int { var num = nums var maxP = num[0] var minP = num[0] var answer = num[0] for i in 1.. 2020. 10. 12.
[Swift] 프로젝트에 Realm 적용하기 (cocoapod 부터 차근차근) Swift 프로젝트에 Realm 데이터베이스를 사용하기 위해서 코코아팟으로 install 해봅시다~ 우선 할 것은 Finder에 자신의 프로젝트 파일을 띄워 놓으세요 제 프로젝트 파일 명은 "Universal Memo" 입니다. 이제 Command + Space bar를 눌러서 terminal을 검색하고 실행 합니다 cd를 입력하고 프로젝트 파일을 drag해서 terminal로 이동시켜 주세요 그리고 enter을 눌러주면 해당 폴더에서 작업을 실행 할 수 있습니다. 이렇게 자신의 프로젝트로 작업 파일 위치 변경 된 걸 확인하고 pod init 을 입력해 주세요 그러면 프로젝트 파일에 보면 Podfile이 생성되어 있는 것을 확인 할 수 있습니다. 저는 vi 편집기를 사용하겠습니다. 다시 terminal로.. 2020. 10. 8.
[Swift] Notification으로 view와 view 데이터 절달하기 나중에 참고 하려고 적는 글 클래스 신원을 체크할 수 없게 되서(?) 드디어 Notification을 쓰기로 했다! 왜 RxRx하는지 알거 같다... ㅎㅎㅎ 1. Notification 등록하기 NotificationCenter.default.addObserver(self, selector: #selector(updateDateLabel(_:)), name: .updateYearDate, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(updateHour(_:)), name: .updateHour, object: nil) NotificationCenter.default.addObserver(self, selecto.. 2020. 10. 7.
[leetCode] 53. Maximum Subarray with Swift 카단 알고리즘으로 쉽게 구하기 leetCode 53은 모든 원소의 값의 합이 최대값을 가지는 서브 어레이를 구하는 것이 목표입니다. 이때 서브 어레이는 연속성을 가져야 하는데, 이 뜻은 중간 인덱스를 뛰어 넘지 않고 인덱스 순서대로 되어 있는 어레이입니다. 그렇기 때문에 배열에서 최대값들의 조합만을 찾아 구하는 것이 아니며 어떤 서브 어레이가 가장 최고의 값을 가지고 있는지 구하는 것이 이 문제에 포인트 입니다. 서브 어레이의 최대값을 구하는 문제에서 많이 언급되는 알고리즘은 Kadane 알고리즘입니다. reference Youtube video here 👇 우선 문제에서 주어진 [-2, 1, -3, 4, -1, 2, 1, -5, 4]를 봅시다. 여기서 첫번째 4를 중점으로 보겠습니다. 현재 인덱스는 3이고 그 인덱스의 값은 4입니다.. 2020. 10. 6.
[Swift] Date와 DateFormatter로 한국 현재 시간 구하고 UILabel에 넣어보기 그 동안 미루고 있었던 Date를 볼때가 온거 같다....🤨 Horizontal collectionView에 첫 번째 셀을 현재 날짜로 기준해서 그 다음 날에 다음 셀을 할 당해 주는 식으로 만들겁니다! 우선 now라는 프로퍼티를 만들어 줍니다. let now = Date().timeIntervalSince1970 Date() 는 현재 날짜와 시간을 반환하게 되는데 timeIntervalSince1970은 1970년 이후로 몇 초가 흘렀는지 나타냅니다. 현재 시간을 now라는 프로퍼티에 지정해 줍니다. 다음으로 DateFormatter을 작성합니다. let date: DateFormatter = { let df = DateFormatter() df.locale = Locale(identifier: "ko.. 2020. 9. 29.
[Swift] UICollectionViewCell 안에 UICollectionView 넣기 UICollectionViewCell 또한 타고 타고 올라가다 보면 UIView이기 때문에 기존에 적용한 방식과 똑같이 해주면 됩니다. 구성을 보면 주황색 뷰는 3개의 섹션을 가진 UICollectionView이고 초록색 구성을 보면 주황색 뷰는 3개의 섹션을 가진 UICollectionView이고 초록색은 각 섹션에 들어가 있는 하나의 UICollectionViewCell 입니다 그리고 분홍색은 마지막 섹션에 있는 UICollectionViewCell에 UICollectionView를 넣고 sub cell을 구현해 준 모습입니다 우선 마지막 줄에 있는 초록색 UICollectionViewCell의 클래스 이름을 MinutePickerCell 이라고 하고 여기에 분홍색의 UICollectionView를 .. 2020. 9. 29.
[Swift] UICollectionView에서 Section을 나눠 보자! 준비물 & 들어가며 이전 포스팅에 이어서 작업하는 튜토리얼 이지만 이미 작성된 기본 UICollectionView만 있다면 조금이나마 도움이 될 거 같습니다! 이번에 구현할 것은 UICollectionView를 3개의 Section으로 나누는 것 입니다~ (섹션에 들어가는 셀은 다음 포스팅에서 다루겠습니다.) 가끔 UI 튜토리얼 보면 상단 컬렉션 뷰는 자동으로 넘어가는 카드뷰, 바로 아래에는 다른 컬렉션 뷰를 놓는 다 던가, 같은 화면에서 다른 컬렉션 뷰들이 들어가 있는 것을 볼 수 있습니다. 이때 각각의 컬렉션 뷰를 구현해도 되겠지만 Section을 나누어 구현해도 됩니다~ 어떻게 구현할 수 있는지 알아봅시다~~ section의 갯수를 지정하는 메소드가 있습니다. optional func numberO.. 2020. 9. 28.
[Swift] Anchor 사용해서 UIView 넣기 들어가기에 앞서... Programmatically 뷰에 뷰를 추가하는 방법입니다. interface builder 에서 UIView를 추가하고 frame을 지정해 줘도 되지만 코드로 view를 생성해서 addSubView 해주거나 휴대폰 방향(width가 바뀌는 경우), safe Area 등은 Anchor를 이용하는 것이 편할 때가 있습니다. 이전에 포스팅 한 collectionView에서 시작하며 이때 발생한 오류는 width가 제대로 나오지 않아 짤리는 경우였습니다. Anchor를 통해서 어떻게 고칠 수 있는지 알아봅시다. 코드를 이용하여 view를 작성해서 넣어주기 위해 storyboard에 추가한 뷰를 삭제해주었습니다 연결된 IBOutlet 삭제도 꼭 해줍니다 ViewController.swif.. 2020. 9. 28.
[iOS] Xcode 두 버전 같이 깔기 Xcode 12 버전 업데이트 가능하자 마자 업데이트 했더니 웬걸 Xcode 11이 필요해 졌다... 당연히 인터페이스 빌더 툴 버전도 바뀌는 건데 업데이트 버튼 바뀌자마자 손가락이 마음대로 눌러버리는 걸 우째 자 우선 Finder > 응용 프로그램 (혹은 Application)으로 들어가 줍니다 업데이트 한 Xcode의 파일 명을 바꿔 주세요 (뭐야 네이버 웨일 왜 두 개지..ㅎㅎㅎ) 자 이제 https://developer.apple.com/download/more/ 로그인 - Apple idmsa.apple.com 아래 링크로 들어가 줍니다! 로그인 필요해요 로그인 해주고 원하는 버전을 검색해 줍니다. 다운 받아 주세요 one hour later... 다운 받은 Xcode 실행해 주면 하나의 맥에서.. 2020. 9. 28.
[Swift] UIViewController 에 UICollectionView 넣기 안내 해당 튜토리얼은 스토리보드에서 UICollectionViewController 로 시작하는 것이 아닌 UIViewController에 UIView를 넣고 해당 부분에 UICollectionView를 넣어주는 방법에 대한 내용입니다. 스토리 보드에서 UICollectionViewController로 시작하고자 하시면 다른 글을 참고해 주세요. 준비 프로젝트를 생성해 주고 빌드 해줍니다. 스토리보드로 실행 되는 걸 확인할 수 있습니다. 이제 스토리보드로 가서 UIView를 추가해 주겠습니다. command + shift + L 원하는 영역에 맞추어 constraints를 추가해 줍니다. 이제 ViewController.swift를 열어 줍니다. UICollectionView를 구현하기 위해서 UICol.. 2020. 9. 28.
UICollectionView must be initialized with a non-nil layout parameter 에러 Exception NSException * "UICollectionView must be initialized with a non-nil layout parameter" 0x000060000266a430 에러 메시지에서 알 수 있듯이 UICollectionView는 nil 타입이 아닌 layout 파라미터로 초기화 해주어야 합니다. 아래와 같은 방법으로 컬렉션 뷰를 생성할 때 레이아웃으로 초기화 시켜 주면 됩니다! let collectionView: UICollectionView = { let layout = UICollectionViewFlowLayout() layout.minimumLineSpacing = 10 layout.scrollDirection = .vertical layout.sectionI.. 2020. 9. 28.