Swift

·iOS
배열안에 tuple을 넣기 위해서 저렇게 하나씩 초기화를 해주어야 한다 var queue : [(x: Int, y:Int)] = [] queue.append((1, 1)) queue.append((1,2)) queue.removeFirst() print(queue) 굳이 x, y 인자를 사용하지 않는다면 생략해주어도 괜찮다 var queue : [(_: Int, _:Int)] = [] queue.append((1, 1)) queue.append((1,2)) queue.removeFirst() print(queue)
·iOS
// 10진수 -> 2진수 let num: Int = 10 let binary_num = Int(String(num, radix: 2))! print(binary_num) // 2진수 -> 10진수 let binary_num = "1010" let num = Int(num, radix: 2)! print(num)
·Algorithm (PS)
https://www.acmicpc.net/problem/12933 12933번: 오리 첫째 줄에 영선이가 녹음한 소리가 주어진다. 소리의 길이는 5보다 크거나 같고, 2500보다 작거나 같은 자연수이고, 'q','u','a','c','k'로만 이루어져 있다. www.acmicpc.net Swift로 풀때 문자열을 for문으로 순회해서 하나씩 값을 확인할 때, Array로 만들고 숫자 인덱스로 접근할 수 있게 하는것이 훨씬 편하다 라는 것을 배운 문제이다 var word = "hello" 라는 문자열을 "h", "e", "l", "l", "o" 이렇게 접근하고 싶다면 var idx = input.index(input.startIndex, offsetBy: i) 이렇게 index로 꺼내고 word[inde..
·iOS
코딩테스트의 구현문제를 위해 빠질 수 없는 문자열처리에 대한 Swift 문법을 정리해보자 1. 문자열 입력받기 Swift에서 readLine() 함수를 사용해서 한줄 읽어들일 수 있는데, 이때 nil 값이 들어올 수 도 있으므로 Swift는 readLine 함수가 Optional 타입의 String을 반환하게 설계한듯하다 어처피 백준에서 옵셔널 처리할 일은 없으므로 강제옵셔널 (!) 처리를 해준다. var input = readLine()! // 문자열 하나 입력받기 2. 문자열의 원소를 하나씩 출력하기 !! Swift는 input[1] 이런식으로 바로 Int 값으로 인덱스 접근이 허용되지 않는다 !! index() 메소드를 이용해서 인덱스를 가져온 후 가져온 인덱스로 문자열에 접근해야 한다 for i ..
·Algorithm (PS)
https://www.acmicpc.net/problem/1245 1245번: 농장 관리 첫째 줄에 정수 N(1 < N ≤ 100), M(1 < M ≤ 70)이 주어진다. 둘째 줄부터 N+1번째 줄까지 각 줄마다 격자의 높이를 의미하는 M개의 정수가 입력된다. 격자의 높이는 500보다 작거나 같은 음이 아닌 정수 www.acmicpc.net 1. BFS 산봉우리들을 세는 문제이다. 좌표는 상하좌우 + 대각선, 총 8방향으로 인접한 칸이면 이동할 수 있으며, 높이 값이 0 이면 산봉우리가 아니다 !!! 따라서 bfs 탐색 또한 높이가 0 보다 클 때만 처리했다. bfs에서 , 현재 확인중인 array[x][y] 값을 중심으로, 자기자신 보다 높은 위치를 만나면 (x, y) 에 해당하는 봉우리 라인은 산봉우..
·iOS
Swift로 코딩테스트를 볼 일이 생겨서 준비를 하는 중에 정리해보고 있다. 새삼 Swift는 기본 문법의 내장 함수 파라미터 이름 하나하나가 정교하다는 느낌을 받는다.. ex) print() 함수의 separator: 라던지.. 그리고 고차원 언어이므로 지원하는 내장 함수나 기능이 풍부하다 !! Python 만큼 대중화(?) 되지 않아서 그렇지 있을건 다 있는 함수이고, 다만 코딩테스트 볼 때는 옵셔널한 값을 받지 않을것이므로 옵셔널 강제 해제를 해주고 있다. 원래 PS때 쓰던 언어가 파이썬이므로 파이썬과의 비교가 있을 수 있습니다(!) 백준 기준으로 보통 이렇게 많이 입력을 받는다 배열에 대한 정보가 주어지기 이전에 배열의 세로길이와 가로길이를 먼저 입력받고, 2차원 배열을 입력받는 코드에 대한 예시..
·iOS
Publishing changes from background threads is not allowed; make sure to publish values from the main thread (via operators like receive(on:)) on model updates. 에러가 났다. 앱이 종료되지는 않았지만 Xcode에서 확실하게 경고를 주고 있다. 의미는 내가 지금 DispatchQueue를 사용해서 비동기 처리를 하려고 하는데, 코드의 위치가 main thread가 아니라 background thread이라는 것 같다. 난 저 이미지들을 IDLE 상태로 모두 바꿔주는 처리를 한큐에 해버리고 싶은데, 왜 이게 위험하다는걸까 ? 1. Main thread Main thread 는 오직 하..
·iOS
레이블러리 앱을 개발하면서 MVVM 패턴을 적용시켜보았는데, 기존에 애플이 지원했던 MVC 패턴을 떠올리며 차이점이 무엇인지 정리해보고 싶어서 글을 쓰게 되었다. MVC 패턴이란 ? Model + View + Controller 구조의 디자인 패턴이다. 그렇다면 각각의 요소에 대해 알아보도록 하자 ~! 1. Model : 앱의 데이터와 관련된 내용을 담고 있다. 그리고 데이터를 관리하는 로직도 Model에 담기게 된다. 네트워크를 통해 받아오는 데이터나 영구적인 데이터를 다루거나 필요한 구조체를 만드는 경우 관련된 코드들은 Model에 담기게 된다. 대체로 Model은 UI와 직접적으로 연결되어 있지는 않다. 데이터 그 자체의 구조를 나타내는게 MVC 패턴에서 일반적이다. - 데이터로 사용하는 구조체 e..
minjiwoo
'Swift' 태그의 글 목록