목록Coding/iOS (19)
Olive Study Room
Mixpanel? - 서비스가 유저들과 어떻게 상호작용 하고 있는지 파악할 수 있는 사용자 행동 분석 툴 mixpanel github mixpanel 공식 quickstart ✏️ Setting 1. 라이브러리 설치 // 프로젝트 Podfile pod 'Mixpanel-swift' // terminal pod install // 사용할 파일 import Mixpanel2. 초기화 /// AppDelegate #if DEBUG let token = Bundle.main.infoDictionary?["TOKEN_DEBUG"] as! String Mixpanel.initialize(token: token, trackAutomaticEvents: true) #else let token = Bund..

Content View Controller 화면을 구성하는 뷰를 직접 구현하고 관련된 이벤트를 처리하는 뷰 컨트롤러 스토리보드 생성시 기본으로 생성되는 controller Container View Controller child view controller를 갖고 관리하고 레이아웃과 화면 전환을 담당한다. 화면 구성과 이벤트 관리는 child view controller애서 한다. ex) Navigation Controller, TabBar Controller UINavigationController 계층구조로 구성된 콘텐츠를 순차적으로 보여준다. 네비게이션 스택(LIFO) 자료구조를 사용 루트뷰 위에 자식 뷰가 올라가도 루트뷰는 메모리에서 삭제되지 않는다. 자식 뷰들은 pop될 때 메모리에서도 사라진다..

보통 프로젝트를 생성하면 상단에 import Foundation import UIKit 위와 같은 코드가 미리 적힌 것을 발견할 수 있다. 이 두 개는 무엇이고 어떤 차이가 있을까? 먼저, UIKit을 import하면 자동으로 Foundation도 import된다. UIKit Framework iOS와 tvOS에 들어가는 앱을 빌드하는데 필요한 핵심 객체를 지원하는 프레임워크다. 객체를 사용하여 콘텐츠를 화면에 표시하고, 콘텐츠와 상호작용하고 시스템과의 상호작용을 관리할 수 있다. 앱은 기본 동작을 UIKit에 의존하며 UIKit은 요구에 맞게 동작을 커스터마이징할 수 있는 다양한 방법을 제공한다. 1. UIKit 어플리케이션의 구조는 객체가 목적에 따라 구분되는 MVC(Model-View-Control..
안드로이드 프로젝트를 끝내고 오랜만에 다시 iOS프로젝트에 대해 공부하면서 얼레벌레 남 코드 활용이 아닌 내 코드를 작성하기 위해 기초부터 다시 잡아보려고 한다. 이제는 CS에 대해 조금 공부를 한 상태이기 때문에 하나하나 이해하는데 어려움이 없을 것이라고 예상한다. 여러 자료들과 학교 수업 자료를 이용하여 공부한다. 더보기 * 학교 수업 자료 목표 - Swift 언어를 이해한다 - 애플의 개발 도구들과 친숙해진다 - 앱을 개발하기 위한 디자인 패턴을 이해하고 적용한다 - 최신 모바일 기기를 이해하고 활용한다 - iOS에서 제공하는 코어 프레임워크를 사용한다 Swift 개요 2014년 9월 iOS 8이 발표되며 apple이 개발한 Swift1.0이 발표 2015년 Swift 2 발표, 오픈소스화 발표 2..

* 필요 지식 더보기 Int형과 Double형은 상호간에 나눌 수 없다. (당연함..) 나누려고 했을 때 0으로 출력되는 경우가 있는데 그 이유는 Int/Int -> Int Double/Double -> Double 이기 때문에 1(Int) / 5(Int) -> 0.2이렇게 출력되는게 아니라 1(Int) / 5(Int) -> 0(Int) 이렇게 출력된다. 그렇기 때문에 나누는 수 중 Double형이 있다면 다른 모든 변수도 Double로 형변환해주어야 한다. String.format(), NumberFormatter, ceil, floor, round * 설명된 모든 경우는 Foundation 프레임워크 내에 있다. import Foundation 1. 기본형 - ceil() 소수점 이하를 버리고 정수에..
map(_:) 시퀀스의 element에 대해 주어진 클로저를 맵핑한 결과를 포함하는 배열을 리턴한다. 주로 배열의 각 요소를 특정 수에 곱하거나 더하는 클로저를 갖는다. compactMap(_:) 이 시퀀스의 각 요소를 사용하여 지정된 변환을 호출한 결과 중 nil이 아닌 것을 포함하는 배열을 리턴한다. 적용하려는 배열의 요소 중 nil값이 있다면 map이 적용되지 않기 때문에 옵셔널바인딩해서 map으로 넘겨줄 수도 있다. nil인 요소를 제거해준다. let arr = [[1, 2], [3, nil], nil] 하지만 위와 같은 배열에서 요소는 [1, 2], [3, nil], nil 이렇게 총 세 가지이기 때문에 compactMap을 적용하고 출력하면 [1, 2], [3, nil]이렇게 두 요소가 출력된..

더보기 control flow를 다시 정리하게 될 줄이야.. 생각보다 swift에는 다양한 control flow가 존재했다.. Control Flow for, while -> 한 작업을 오랜 시간에 걸쳐 반복 수행 if, switch -> 특정 조건에 따라 분기시켜 실행 break, continue, fallthrough -> 실행 흐름을 다른 부분으로 이동 [ for ] for, for-in 1. for 2. for-in - 일반적인 사용 for _ in 1...5 { print("dev") } //dev //dev //dev //dev //dev let index: [Int] = [1, 2, 3, 4] for i in 0...index.count-1 { print(index[i]) } //1 //2..
더보기 매 프로젝트에서 사용은 해왔지만 영문도 모르고 받아 적기만 했던 고차함수. 한번 정리해보자! 고차함수란? 매개변수로 함수를 받거나 함수를 반환하는 함수 map, filter, reduce 등이 있다. 위 함수는 swift 표준 라이브러리에 속한다. 1. map(_:) 시퀀스의 요소를 통해 지정된 클로저를 맵핑한 결과가 포함된 배열을 리턴한다. Declaration func map(_ transform: (Element) throws -> T) rethrows -> [T] Parameters transform : 맵핑 클로저. 파라미터처럼 이 시퀀스의 요소에 접근하고, 같거나 다른 타입의 변형된 값을 리턴한다. * 클로저 내에 생략할 수 있는 값 let text: [Int] = [1, 2, 3, 4..