멀고도 험난한 개발 일지 13

[Swift 알고리즘] Int 끼리의 연산 결과 생긴 Float 는 어떻게 될까?

원래 백준 풀다가 ㅎㅇ의 추천으로 프로그래머스로 전향..! 백준은 나중에 짬 좀 차면 하지 않을까,, [오늘의 문제] 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제는 들어가보면 확인할 수 있지만, 정수 배열이 주어졌을 때 등비수열인지 등차수열인지 판단하여 다음에 올 숫자를 알아내는 문제이다 간단하다고 생각해서 촤르륵 코드를 썼다 . . . [처음에 작성한 코드] import Foundation func solution(_ common:[Int]) -> Int { if (common[0] + common[2])/2 == common[1] { retur..

[Swift 알고리즘] split() vs components()

새로운 분류의 글을 올리기 시작!! 바로 알고리즘! 취준을 위해 천천히 조금씩 진행하려 한다 ㅎㅎ 예전에 파이썬으로 조금 풀다가 그만했었는데 다시 swift로 시작! 백준 브론즈부터 풀고 있는데 참 짜증나는 점을 알게 됐다 ^____^ [오늘의 문제] 10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. www.acmicpc.net 브론즈 3 문제다 근데 처참함... ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 아니 브론즈3인데 이게 뭐냐고 ㅋㅋㅋㅋㅋㅋㅋㅋ 1트 import Foundation var cnt = Int(readLine(..

개발공부 ToDo - UI를 그릴 수 있게 된 뒤에는?

스타트업 커뮤니티 파티에서 만들어준 내 명함을 여기저기 뿌리고 다녔는데 iOS 개발자가 좀 희귀하다 보니 어떤 분이 연락이 왔다 iOS 관련해서 꽤나 자세히 아시고 스타트업 운영하면서 돈도 꽤나 버신 분인 것 같았다 아무래도 iOS 선배님이니까 아카데미가 끝나고 난 뒤 어떤 방식으로 공부해야할지 물어보았는데 꽤나 좋은 이야기를 많이 해주셔서 기록해두려 한다 · 나는 보통 UIKit를 쓰는데, SwiftUI가 미래라는걸 꽤나 강조하셨다 요즘 토스에서도 SwiftUI로 다 갈아엎기도 했고, 다양한 기업에서도 SwiftUI를 많이 사용하다고 한다 내가 UIKit를 사용하는 이유는 일단은 우리 팀이 제일 익숙해 하는 프레임워크이기 때문인데, SwiftUI를 따로 공부하긴 해야한다는 생각이다 그래서 사이드플젝(곧..

WWDC21 - Discoverable Design

절대 이번주 글 올릴게 없어서 WWDC 스터디 때문에 공부한거 올리는거 아니다.. 암튼 아니다.. 해당 영상에서는 온보딩 없이 어떻게 유저가 앱의 기능들을 알아차릴 수 있을지에 대해 설명해두었다 Toasty 라는 자기들이 만들었다는 앱을 예시로 설명하고 있으니 천천히 따라가보자 Toasty 기능 토스트 레시피 기록 토스트 검색하기 토스트 만들기 토스트 사진 찍으면 레시피 만들어주기 이런 기능들이 있다는 것을 사람들이 어떻게 이해할 수 있을까?🤔 Onboarding Tutorial 정말 유저가 앱의 첫 화면에 토스트 검색 어떻게 하는지, 토스트 기록 어떻게 하는지, 토스트 사진 어떻게 찍는지, 토스트 만드는건 어떻게 하는지, 등등… 설명만 쭈욱 나열된 것을 의미 있게 살펴볼까? 🙅‍♂️ Nope 🙅‍♀️ ..

이런저런_구글링_3 - UserDefaults, Singleton Pattern

UserDefaults Apple Developer Documentation 에서 가져온 정의 An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app. UserDefaults의 특징 앱 내부에 보안이 필요하지 않는 소량의 데이터를 저장해야 하는 경우 사용 [데이터, key(String)] 형태로 저장됨 UserDefaults 사용법 let myUserDefaults = UserDefaults.standard myUserDefaults.set(TestSwitch.isOn, forKey: "switchState") // .set(, forKey: ) →..

UIKit_유투브_신동규 - #5 UI 실습

각 Component 넣어서 실제 UI 화면과 비슷하게 만들기 하나의 component를 다른 component로 감싸고 싶을 때 lazy var loginTextField: UITextField = { let tf = UITextField() tf.placeholder = "ID" return tf }() lazy var loginTextFieldView: UIView = { let view = UIView() view.layer.cornerRadius = 10 view.layer.borderColor = UIColor.tertiarySystemGroupedBackground.cgColor view.layer.borderWidth = 1 // loginTextFieldView 안에 loginTextFi..

UIKit_유투브_신동규 - #3 아무곳이나 클릭했을때 키보드 숨기는 법

올라와있는 키보드를 아무데나 다른 곳을 클릭했을 때 내리기! TextField 외의 공간을 터치했을 때 키보드가 숨겨지도록 하기 func dismissKeyboard() { view.endEditing(true) } Editing이 끝났을 때 dismissKeyboard 함수가 실행되도록 하고, Textfield 외의 공간을 터치했을 때 실행돼야 함 · · · viewDidLoad 함수에서 처리하기 override func viewDidLoad() { ... let tap = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard)) view.addGestureRecognizer(tap) } UITapGestureRecognizer를..

UIKit_유투브_신동규 - #2 Pro처럼 UI 디자인하기

화면은 어떻게 구성할까?! View 한가운데에 “Hello World”가 쓰인 Label 두기 lazy var helloWorldLabel: UILabel = { let label = UILabel() label.text = "Hello World" return label } () UILabel 인스턴스 생성하고 하지만 사용하려면 View가 Load 되었을 때 호출해주어야 함 · · · View component들의 생김새를 관리하는 함수들을 한곳에 모아두기 // MARK: Configures func configureViewComponents() { self.view.backgroundColor = .systemBackground } self는 RootViewController를 의미한다 .system..

UIKit_유투브_신동규 - #1 Pro처럼 project 시작하기

목표: ViewController.swift, Main.storyboard 파일을 직접 사용하진 않을 것 UIKit UIKit란? 화면을 구성하는 것들을 해줄 수 있는 라이브러리 (폰트, 라벨 등등) 처음에 기본이 되는 UIViewController 삭제함 그리고 새로 .swift 파일 생성 후 ViewController 선언! import Foundation import UIKit class RootViewController: UIViewController { } UIViewController을 상속함으로써 UIViewController 역할을 할 수 있게 하자 · · · LifeCycle(생성자) 선언 class RootViewController: UIViewController { // MARK: L..

이런저런_구글링_2 - Alamofire, 얼탱이 없는 Moya..

Alamofire를 이용한 JSON 형식의 서버 통신 지난번엔 URLSession을 사용해서 POST와 하는 법을 올렸었다 이런저런_구글링_1 - Date to String, Design Pattern, Voice Recorder, Post Method 먼저, Alamofire, Moya 등 여러 서버 통신용 프레임워크가 있는데 왜 URLSession을 쓰나! URLSession을 사용하면 통신 과정 중 더 많은 커스텀(?)이 가능하기 떄문..!! 하지만 현재 앱에서는 그런게 필요 없기 때문에 이미 주어진 프레임워크를 사용하는게 더 편리하다 일단 코드를 보자..! import Foundation import Alamofire let parameters: [String: [String]] = [ "foo"..