SWIFT 316

[iOS] Then 라이브러리

https://github.com/devxoul/Then GitHub - devxoul/Then: ✨ Super sweet syntactic sugar for Swift initializers ✨ Super sweet syntactic sugar for Swift initializers - GitHub - devxoul/Then: ✨ Super sweet syntactic sugar for Swift initializers github.com 사용 이유 - Swift 초기화를 할때 간편하고 깔끔하게 코드를 만들어 준다 특징 - NSObject 하위 클래스는 모두 사용가능하다 - Then의 경우 Protocol로 구현되어 있다. Then 사용 전 객체 생성코드 let titleLabel: UILabel =..

[iOS] 백그라운드일때 이벤트 발생 (NotificationCenter)

- 등록된 옵저버에게 동시에 정보를 브로드 캐스트 할 수 있는 클래스 - NotificationCenter에 등록된 이벤트가 발생하면 이벤트에 대한 행동을 취함 - 백그라운드, 비동기 작업의 결과 등 현재 작업의 흐름과 다른 흐름의 작업으로부터 이벤트를 받을떄 사용함 옵저버 추가 addObserver(observer:selector:name:object:) - observer: 옵저버가 될 객체 - selector: 이벤트가 발생했을때 호출될 메서드 - name: 등록하려는 이벤트 이름 (NSNotification.Name 타입) - objcet: 발송자가 옵저버에게 보내려고 하는 객체 - NSNotification.Name: 이벤트의 이름을 나타내는 타입. 주로 문자열 상수로 사용되며, 이벤트 식별에 ..

iOS랑 친해지기 2023.08.15

[Swift] convenience init (보조 이니셜라이저)

클래스를 생성할때 init을 통해서 반드시 모든 프로퍼티를 초기화한다. 이렇게 모든 프로퍼티를 초기화하는 init은 본래 Designated init이라고 한다. convenience init은 Designated init을 보조해주는 이니셜라이저이다. 예를 들어 밴드 멤버를 처음부터 구해서 결성한다하면 다음과 같이 모든 장르를 지정해주어 인스턴스를 생성할 수 있다. 하지만 기타와 드럼은 확정이고 보컬, 베이스 구한다고 가정한다면 다음과 같이 보조이니셜라이저를 이용할 수 있다. 보컬을 박박씨와 베이스를 이이씨로 구했다고 가정하면 다음과 같이 밴드가 결성되는 것이다. 밴드인원을 본래처럼 모두 구하고 싶으면 모두 초기화 해줄수도 있다.

[iOS] JSON 배열의 인덱스마다 구조가 다른 데이터 파싱 (옵셔널)

Word of the day API에서 랜덤한 문자를 받고 싶었다. https://rapidapi.com/jayantur13/api/word-of-the-day2 Word of the day API Documentation (jayantur13) | RapidAPI rapidapi.com Postman으로 Get 형식으로 데이터를 받아왔을 경우 JSON형태가 다음과 같았다. [ ] 문자로 시작해 배열로 확인하였고 첫번째인덱스에만 info라는 이름을 가지는 객체가 있었고, 나머지 인덱스에는 source,date,word,type,mean라는 이름을 가진 객체가 있었다. [ { "info": "Note: This API doesn't gaurantee latest data by date." }, { "sou..

iOS랑 친해지기 2023.08.02

[URLSession, Alamofire] Naver Papago API 로 번역하기 (iOS)

1. Naver Developers 에서 API를 사용하기 위해 애플리케이션 등록 NAVER Developers 네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음 developers.naver.com 2. Client ID 와 Client Secret를 발급 받는다. 3. POST 방식으로 JSON파일을 받아 올 수 있다. 👨‍💻 POST 기본 지식 - HTTP 방식에는 크게 요청메시지, 응답메시지로 구분된다. - 이 메시지는 크게 라인,헤더,바디로 구성이 된다. - 라인 (전송메서드/요청 내용경로/요청 형식 버전정보) //예제 POST /userAc..

[프로그래머스] 최댓값과 최솟값 (Swift)

https://school.programmers.co.kr/learn/courses/30/lessons/12939 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import Foundation func solution(_ s:String) -> String { let splitS = s.components(separatedBy: " ").map{Int($0)!} return "\(splitS.min()!) \(splitS.max()!)" }

[프로그래머스] 타겟넘버 (Swift) ※1,2번 실행초과

https://school.programmers.co.kr/learn/courses/30/lessons/43165 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr DFS 깊이 우선 탐색 알고리즘으로 푼 코드 - 탐색하려는 노드의 자식 노드부터 우선 탐색하는 방식 import Foundation func solution(_ numbers:[Int], _ target:Int) -> Int { var count = 0 func dfs(index: Int, sum: Int) { if index == numbers.count{ if sum == target { co..

[프로그래머스] 피로도 (Swift)

https://school.programmers.co.kr/learn/courses/30/lessons/87946 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import Foundation func solution(_ k:Int, _ dungeons:[[Int]]) -> Int { var result = 0 //최대 던전수 //모든 경우의 수를 생각해봐야 하기 때문에 재귀 함수 사용 func visit(_ orders: [Int]){ //3. orders에 가야할 던전의 순서가 정해질 경우 if orders.count == dungeons.count{..

[프로그래머스] 2018 KAKAO BLIND RECRUITMENT[3차] 압축 (Swift)

https://school.programmers.co.kr/learn/courses/30/lessons/17684 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 1. Unicode와 딕셔너리를 이용해 key값을 A - Z (String)까지 value 값을1 -26 (Int)까지 알맞게 데이터 저장 2. 파라미터 msg의 인덱스를 이용하여 문자열을 잘랐음 3. 자른 문자열을 딕셔너리가 가지고 있지 않을때를 기준으로 dic에 데이터를 저장하도록 하였음 이때 두개 이상의 문자길이를 가지고 있을 경우 다음 입력의 순서를 건너 뛰어야 하므로 wcount를 ..

[프로그래머스] 2개 이하로 다른 비트 (Swift) -10,11 실행초과

https://school.programmers.co.kr/learn/courses/30/lessons/77885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ※ numbers의 수들을 차례로 1씩 늘려서 비트를 비교하게 되면 10,11 실행초과 ※ - radix 메서드를 이용해 2진수로 변환 규칙을 찾아서 문제 해결 1. 마지막 자리비트가 0이면 1을 더함 - (10진수에 1을 더함) ex) 10진수 2 - 0010 -> +1 -> 0011(3) 2. 모든 비트가 1일 경우 비트 맨 앞자리에 1을 삽입하고 Index 1을 0으로 변환 ex) 10진수 ..