본문 바로가기

반응형

개발/Swift

(21)
[Swift] File System File System iOS는 유닉스인 것을 기억하자! 유닉스 파일 시스템에서 접근 가능한 유일한 부분은 샌드박스다. + 샌드박스는 닫혀있는 작은 공간을 말한다. 다른 앱의 정보를 적을 수 없음. iOS가 앱 공간에 제한을 두는 이유는 이렇다. Security- 다른 앱이 앱을 망가뜨리는 것을 원하지 않는다. Privacy - 사용자 정보를 수집하는 경우 다른 악성 앱들이 정보를 빼가는 것을 막는다. Clean up - 사용자가 앱을 사용하지 않으면 정보를 정리할 수 있고, 샌드박스 안에 있다면 샌드박스를 지울 수 있다. 파일 시스템의 접근은 두 개의 클래스 또는 두 개의 객체로 이루어진다는 것이다. 하나는 FileManager이고 다른 하나는 URL이다. (URL은 기본적으로 경로다.) 먼저 해야할 것..
[Swift] 객체 저장 - Archiving Archiving UserDefaults의 문제는 작은 데이터만 다루는 것과 속성 리스트만 가능하다는 점이다. 만약 저장하고자 하는 데이터가 매우 크거나 속성 리스트가 아닌 것을 포함하고 있다면, 아카이브를 사용하면 된다! 아카이브에는 NSCoder와 Codable를 이용한 두 가지 매커니즘이 있다. NSCoder NSCoder는 저장하고자 하는 모든 객체를 하나의 객체 그래프로 영구 저장한다. func encode(with aCoder: NSCoder) init(coder: NSCoder) encode를 통해 값을 저장하고 init(coder: )에서 객체를 초기화 할 수 있다. 이 함수는 객체 그래프 내에 있는 모든 객체에 호출되어 큰 딕셔너리 안에 넣어지게 된다. 주로 하는 일은 객체를 데이터로 바..
[Swift] 객체 저장 - UserDefaults UserDefaults 딕셔너리와 같다! 키와 값을 이용해 입력하고 앱을 다음 번에 열었을 때도 그대로 있게 한다. 단 하나의 제한이 있다면 이 딕셔너리 안에 넣을 수 있는 것은 속성 리스트이다. 속성리스트는 어떤 조합 어떤 데이터 구조를 말하는데 오직 배열, 딕셔너리 , 스트링, 날짜, 데이터 또는 숫자로 이루어진 조합을 말한다. UserDefaults 에는 두가지 메소드가 있다. func set(Any?, forKey: String) 키 인자에 해당하는 속성 리스트를 저장하는 메소드와, func object(forKey: String) -> Any? 키에 해당하는 속성 리스트를 반환하는 리스트이다. 속성의 값이 정수나 문자열의 배열이 될 수도 있다. 키가 문자열이고 값이 실수의 배열인 딕셔너리도 될 ..
[Swift] Multithreading iOS API 의 Multithreading 예시를 살펴보자. let session = URLSession(configuration: .default) if let url = URL(string: "http://djgmd1021...") { let task = session.dataTask(with: url) { (data: Data?, response, error) in } task.resume() } URLSession은 네트워크를 통해 URL에서 정보를 가져올 때 사용한다. URL로 session에 dataTask 함수를 호출하면 dataTask를 생성하는데, 이것은 데이터를 가져오는 일을 한다. 그 후 실행이 일시 중지되는데 바로 다음 라인에 대부분 실행을 재개하라는 명령(resume)을 하고 동..
[Swift] DispatchQueue 종류 iOS에서 멀티스레딩은 큐를 이용해 작동한다. iOS 멀티스레딩 큐에는 코드 블럭들이 들어있다. 이 큐에 집어넣는 것은 거의 대부분 클로저다. 큐는 여러 개고 다양한 종류들이 있다. 이 큐에는 실행 스레드를 가진 시스템이 접근한다. 이 스레드들은 병렬로 작동할 수 있다. 우선 큐에 대해 알아보자. 직렬큐 (Serial Queue)와 병렬큐 (Concurrent Queue) 2가지가 있다. 직렬(Serial)큐는 iOS가 큐에서 하나를 꺼내고, 해당 작업이 완료될 때까지 실행시킨다. 그럼 다시 큐로 돌아와 다른 하나를 꺼내어 실행시킨다. 병렬(Concurrent)큐는 iOS가 큐에서 하나를 꺼내고 실행시킨다. iOS가 사용 가능한 다른 스레드가 있다면, 큐에 접근해서 스레드를 꺼내 실행시키는데 이는 그 전..
[Swift] ViewController LifeCycle ViewController Life Cycle 생명주기는 UIViewController가 호출한 메시지나 메소드의 순서로 표시된다. 생명주기는 왜 중요할까? 뷰 컨트롤러 생명주기의 각 단계에 개입하고 싶을 수 있고 생명주기를 통해 특정한 때에 어떤 일을 하도록 시킬 수 있다. UIViewController가 생성되면서 생명주기가 시작된다. 사실 생성된 후 가장 먼저 하는 일은 세그웨이 하도록 준비하는 것이다. 세그웨이로 인해 화면에 보이게 되면 준비하는 단계가 실행된다. 그 다음에는 아울렛을 설정한다. 그 다음 뷰 컨트롤러가 화면에 나타나고 사라질 수도 있다. 빠른 순서 요약 Instantiated awakeFromNib segue preparation happens outlets get set view..
[Swift] Interface @IBDesignable @IBDesignable class button: UIButton { .... } draw 하는 것을 코드로 작성해서 스토리보드에 보이지 않는 것이 있다면 이 것을 작성해주면 좋다. 위와 같이 적어주면 인터페이스 화면에 보이게 할 수 있다. @IBInspectable @IBInspectable var checked: Bool = false { didSet { updateImage() } } 스토리보드의 오른 쪽의 네비게이터에는 여러 변수를 조정할 수 있다. 이 코드를 적어주면 인터페이스 화면 옆에 변수를 띄울 수 있어 조작에 편리하다. 인터페이스 빌더 화면에 이미지를 보이고 싶다면 아래와 같이 작성하자. if let cardImage = UIImage(named: "", in: ..
[Swift] NSAttributedString NSAttributedString은 문자열의 모든 문자가 각각 딕셔너리를 가지고 있는 문자열이다. 딕셔너리의 여러 키오와 값들이 화면에 나타난다. 각 문자가 가질 수 있는 딕셔너리는 값은 키의 타입과 관련이 있다. 대체로 여러 문자의 범위 내에서 하나의 딕셔너리를 사용한다. 속성 문자열로 여러 폰트나 문자의 색깔 등을 가지면 UI 라벨의 글자를 설정하거나 UI버튼의 타이틀을 설정할 수 있다. 앞에 NS가 붙어있는 것은Objective-C의 API가 스위프트에 있는 것으로 약간의 타협이 필요하다. 이 타입은 유추하게 해서는 안된다. 스위프트는 해당하는 값이 어떤 것인지 몰라서 딕셔너리 값을 알 수 없다. NSAttributedString은 class이기 때문에 var을 이용해 가변 변수로 만들 수는 없다...

반응형