본문 바로가기

분류 전체보기137

Swift) GCD (Grand Central Dispatch) Task Distribution 우린 일을 한다. 아 물론 지금의 난,,, 네,, 이건 간단한 것이니깐 알바를 예로 들어 설명해보겠다. 사장님이 알바생 한명한테만 일을 계속 시킨다. 하지만 알바생은 한번에 하나의 일밖에 하지 못한다.. 바닥 닦으면서 불판을 어떻게 닦아.. 주어진 일을 하나씩 처리해야하는데, 불판 닦고, 손님 응대하고, 바닥 닦고, 세금 처리까지 다 하고 사장님 애를 봐야한다. 그럼 사장님 애는 알바생에게 먼저 맡겨진 일이 모두 처리될 동안 뭐해야됨 상당히 비효율적일 것이다. 그럼.. 일을 분배하면 되겠지? 알바생을 더 써서 일을 나눈다면 이전보다 훨씬 효율적으로 일을 처리할 수 있을 것이다. 자.. 위에서 든 예에서 알바생을 "스레드"로 바꿔서 생각해보자 메인 스레드에만 할당되어있던 일.. 2022. 2. 15.
Swift) Main.sync 외 않됌? sync, async .. concurrent, serial을 공부하다가 main.sync를 돌려보니 프로그램이 죽는 것을 보고.. 왜 그런건지 어제 오늘 하루종일 생각해봤다. 왜 main.sync 하면 안됨? 먼저 생각해본 것은 뭐였냐면.. 메인 스레드는 프로그램이 시작하고, 종료될 때까지 계속 일을 처리하고 있으니, 해당 스레드에 동기적으로 일을 시켜버리면 프로그램이 필수적으로 해야됐던 일을 내가 동기적으로 시킨 일을 처리할 때까지 하질 못하니깐 프로그램이 죽는거 아닐까? 라고 생각했다. 메인 큐는 serial queue이고, 일을 순차적으로 처리한다. 그리고 메인 큐는 일을 처리할 때 단일 스레드인 메인 스레드에 무조건 할당시키게되는데.. 이런 이유때문인가..? 도 했다.. 그래서 내가 도달한 결론.. 2022. 2. 13.
[Swift] 배열 안전하게 조회 배열 안전하게 조회 indices 그 전에 indices에 대해 알아보자 해당 프로퍼티는 Collection 타입의 프로퍼티이다. 이 프로퍼티는 Collection의 유효 범위를 갖고있는 프로퍼티이다. 예를 들어 arr이라는 배열의 요소가 [1, 2, 3, 4, 5]로 5개의 요소를 갖고있으므로 indices의 값은 0.. Element? { return indices ~= index ? self[index] : nil } } 근데 이게 문제가 전달인자 레이블 안붙이면 컴파일러가 애플이 만든 subscript랑 구별을 못한다. 모호하단다. 그래서.. 너무 보기 안좋지만 붙여줬다 extension Array { subscript(index index: Int) -> Element? { return indi.. 2022. 2. 13.
Swift) Subscript Subscript 정의: 클래스, 구조체, 열거형에서 시퀀스의 멤버 요소에 접근하기 위한 바로가기 첨자로, 단일 타입에 여러 서브스크립트를 정의할 수 있다. 시퀀스 요소에 접근하기 위한 바로가기 첨자는 어찌 이해는 하겄는데 단일 타입에 여러 서브 스크립트.. 뭐 이니셜라이저 여러개 쓰는 것처럼 쓸 수 있다 이 말인가? 근데 의외로 간단하더라 우린 항상 Subscript를 사용해왔다. 위 코드는 Array의 서브 스크립트인데, 이걸 어떻게 사용해 왔느냐면은 let city: [String] = ["Seoul", "Bucheon", "Busan", "Incheon"] print(city[1]) // 서브 스크립트 ( '[]' ) 파라미터로 인덱스(Int)를 받아 배열의 요소를 반환하는 형태이다. 딕셔너리도 .. 2022. 2. 13.
Swift) Dynamic Type, Accessibility Inspector Dynamic Type 동적 타입? 스크롤뷰처럼 동적으로 뭐.. 크기 늘어나고 그런건가 싶었는데, 아니더라 텍스트의 크기를 flexible하게 조정하는 것이다. 모든 사용자의 시력 등의 조건은 다르다. 이 때문에 애플은 사용자에게 폰트사이즈를 사용자에게 맞게끔 변경할 수 있게 만들어주었다. 하지만 사용자가 폰트사이즈를 변경한다고 어플리케이션의 폰트 사이즈가 변경되진 않는다. 이때 텍스트를 다이나믹 타입으로 만들어주면, 사용자가 설정한 폰트 사이즈에 맞게끔 변경할 수 있다. 위는 애플에서 정의한 다이나믹 타입의 목표이다. 변경은 어떻게 하죠 설정 > 손쉬운 사용 > 디스플레이&텍스트 크기 Dynamic Type 지원 개발자는 모든 사용자를 고려하고, 지원해야하기에 Dynamic Type을 지원하는 어플리케.. 2022. 2. 13.
Swift) 문자열의 특정 범위의 속성을 변경해보자 NSMutableAttributedString NSMutableAttributedString 하나의 레이블에서 특정 부분만 폰트나 사이즈를 변경해주고싶었는데.. 범위를 지정해서 특정 범위에 있는 문자열을 빼오고 원래의 문자열의 특정범위를 빈값으로 변경해버린 뒤 빼온 문자열의 폰트를 변경해 주고.. 다시 원래의 문자열에 더해준다.. 너무 복잡하다. 그러다 이런걸 발견했다. NSMutableAttributedString은 문자열의 속성을 변경할 수 있는 문자열의 타입이다. let attributedString = NSAttributedString(string: cell.customLabel.text ?? "") 해당 타입의 이니셜라이저를 사용하여 String타입의 문자열을 NSMutableAttributedString 타입의 문자열로 반환(변경)한다. .. 2022. 2. 13.