Programming/iOS_Swift(30)
-
[iOS_Swift] 강한참조와 약한참조 + 참조타입, ARC
강한참조와 약한참조란? - 참조에 대한 이해 강한참조와 약한참조라는 표현을 이해하기 전에 저 '참조'라는 단어를 먼저 이해해볼 필요가 있다. 참조가 뭘까, 무언가를 참고한다는 의미인 것 같은데 뭘 참고하는 것일까. 참조라는 표현을 이해하기 위해서는 우리는 다시 또 조금 더 상위의 개념인 클래스가 어떤 타입인지를 이해해야 한다. 클래스는 레퍼런스 타입, 즉 '참조'타입이다. 따라서, 클래스의 인스턴스들은 해당 클래스의 다른 인스턴스들을 참조할 수 있다. 예시를 통해보자. 똑같은 형식으로 클래스와 구조체를 만들어줬다. 코드를 보면 student2 인스턴스는 student1 인스턴스를 '참조' 하고 있다. 쉽게 생각하면, student1과 2는 일종의 일심동체라고 보면 된다. 따라서, 1의 학생명은 'Kim'..
2021.12.23 -
[iOS] 누락된 Crashlytics dsym파일 로컬머신에서 찾기[SPM]
만약 이미 앱스토어에 업로드한 앱에서 누락된 dsyms파일이 있을 경우에는 아래 블로그를 참조해서 해결하자. https://ahyeonlog.tistory.com/59 그런데, 만약에 로컬 머신에서 테스트하다가 누락된 dsym파일이 있다면 직접 어떤 파일이 누락된건지 알아내야 한다. 가령 나의 경우, 다음과 같은 파일들이 누락되었다. 그러면 얘네들의 UUID를 활용해서 누락된 해당 파일을 찾아줘야 하는데, 예시를 위해 제일 하단의 FFF9B5DF~~~를 찾아보자. 찾기 위해, 다음의 키워드를 터미널에 입력해주자. mdfind -name .dSYM | while read -r line; do dwarfdump -u "$line"; done 그러면 이렇게 쭈욱 뜨는데 누락된 UUID를 찾아주면 된다. 찾은 ..
2021.12.18 -
[iOS_Swift] 프로퍼티 감시자(Property Observers)(코드x)
프로퍼티 감시자란? 어떤 저장프로퍼티와 부모클래스로부터 상속받은 저장프로퍼티, 연산프로퍼티에 새로운 값이 할당될 때, 그러한 변화들을 관찰하고 호출(respond)하는 역할을 수행하는 것이다. 프로퍼티 감시자의 특징 1. 프로퍼티의 값이 변경될때마다 호출됨.(~~~~called every time a property's value is set.) 2. 새로운 값이 기존의 값과 같더라도 호출됨.(~~~~even if the new value is the same as the property current value.) 3. 지연저장프로퍼티에는 감시자를 넣을 수 없음.(~~~~except for lazy stored properties.) 3. 부모클래스로부터 상속받은 저장프로퍼티, 연산프로퍼티에도 넣을 수..
2021.12.18 -
[iOS_Swift] 클로저(2) - 기본 클로저
1편에서 클로저를 이해하기 위해 1급 객체에 대해 알아봤으니 본격적으로 클로저를 이해하고 어떻게 사용하면 좋을지 알아보려고 한다. 우선 클로저란 사용자의 코드에서 전달 및 사용할 수 있는 독립된 기능 블록이라고 한다. 이해가 잘 안가는 말인데 쉽게 생각하면 앞으로 사용하고 부르게 될 클로저들은 '이름 없는 함수'로 생각하면 편할 것 같다. 정확한 설명은 절대아니다! 이해의 편의를 위해.. 정확하게 클로저에 대해 분류를 하면 Named Closure, Unnamed Closure로 나눠 진다. 여기서 Named Closure가 우리가 흔히 알고 사용하는 함수이다. 즉 함수는 클로저의 일종인 것이다! Unnamed Closure가 바로 앞으로 계속 다루게 될 녀석이다. 즉 앞으로 언급하는 클로저는 전부 앞에..
2021.11.03 -
[iOS_Swift] 클로저(1) - 1급 객체(First-class Citizen)
클로저를 이해하기 위해서는 먼저 1급 객체(First-class Citizen)에 대한 이해가 반드시 수반되어야한다. 1급 객체란 어떠한 객체가 다음과 같은 조건을 만족할 때 1급 객체라고 한다. 1. 변수나 상수에 객체를 저장할 수 있는가? 2. 객체를 어떤 함수의 매개변수로 전달할 수 있는가? 3. 객체를 어떤 함수의 반환값으로 지정할 수 있는가? 이러한 조건을 충족할 때 우리는 해당 언어를 함수형 프로그래밍 언어라고 할 수 있다. 개인적으로 여기서 객체라는 개념이 늘 헷갈리는데(클래스나 구조체의 인스턴스 등) 여기서 말하는 객체, 함수형 프로그래밍 언어에서의 1급 객체는 '함수'를 의미하기도 한다! 좀 더 자세하게 함수가 어떻게 1급 객체의 요건을 충족시키는지 살펴보자 1. 변수나 상수에 객체(함수..
2021.10.25 -
[iOS_Swift] guard, guard let문
요즘 Guard문을 타입캐스팅을 할 때나 옵셔널바인딩을 할 때 주로 활용 중인데, 이걸 내가 제대로 이해를 못하고 쓰는 느낌이 강해서 개인적으로 정리가 필요했다. guard문 guard문에 대해서 먼저 이해를 해보자면, guard문은 if ~ else문처럼 일종의 조건문이라고 이해하면 쉬울 것 같다. 둘의 차이점은 guard문이 if문에 비해서 상대적으로 간결하고 읽기 좋은 코드를 작성할 수 있다는게 첫 번째 차이점이며, 두 번째 차이점은 guard문의 경우 return, break 등의 명령어가 반드시 필요하다. 예시를 통해 보자. 숫자가 3보다 큰지를 판단하는 함수 안에 guard문과 if else문을 두개 다 넣었다. 두개다 모두 같은 결과를 반환하며, guard문이 확실히 간결하고 읽기 편하다는 ..
2021.10.20