본문 바로가기

전체 글61

값전달 - 클로저 트러블 슈팅 코드구현 의도(VC1 -> VC2) 사용자가 특정 영화의 클립을 선택하면 웹뷰컨(VC2)에서 flag로 bool값을 받아 서치뷰컨(VC1)의 클립버튼의 배경색을 바꾸려고함 (유저디폴트로 하면되지만 값전달로 유저디폴드를 연습삼아 전달해봄) 문제상황 기존의 생각 VC1의 클립을 클릭하면 → 클로저의 기능이 전달되고 → 그 값을 토대로 VC2의 클래스의 bool타입 프로퍼티인 flag에 bool값을 넣어주고 → VC2의 clikedClip함수가 실행되어 얼럿이 띄워지고 → 얼럿의 액션버튼을 누르면 전달된 클로저 기능 코드를 호출하게 되고 → 다시 VC1에 값전달되는 줄 알았다. 문제상황 하지만 얼럿의 액션버튼을 클릭하면 배경색을 바꾸는 클로저 내부의 코드에 breakpoint가 걸려야하는데(아래 사진 참조),.. 2022. 8. 19.
Equatable 참고로 lhs, rhs 의미는 검색하면 정말 잘 나와있다. 내가 이해한 바로는 매개변수 자리에 대한 의미 정도? Equatable Equatable은 타입끼리 비교(==)연산을 하기 위해서 필수적으로 구현해야하는 프로토콜 Int, String끼리는 비교가 되는데 왜 구조체, 클래스 인스턴스끼리 비교가 안 될까? struct Human { var name = "" var age = 0 } let human1 = Human.init() let human2 = Human.init() human1 == human2 // Binary operator '==' cannot be applied to two 'Human' operands 라는 오류가 뜸 => Int, Double, String은 가장 기본적인 자료형으.. 2022. 8. 18.
타입캐스팅 TIL 업캐스팅 let iphone: Mobile = Apple(name: "APPLE") iphone as Mobile //Apple 인스턴스가(iphone) 서브 클래스(Apple)를 채택하고, 슈퍼클래스 타입(Mobile)으로 참조하는 "업캐스팅"을 한 것이기 때문에, 인스턴스의 접근 범위가 슈퍼클래스 멤버로 한정되는 것임. 슈퍼클래스를 참조한 것이기 때문에 서브 클래스에서 아예 슈퍼클래스로 전환되는 것이 아님. 업캐스팅과 다운캐스팅은 해당 인스턴스의 타입이 바껴버리는 변수의 개념이 아니라(해당 인스턴스의 타입은 그대로임) 다른 인스턴스를 생성하여 거기에 바뀐 타입캐스팅된 인스턴스의 상태를 저장한다고 보면됨 2022. 8. 18.
forEach와 for_in 차이 Calls the given closure on each element in the sequence in the same order as a for-in loop. for문과 동일한 순서로 컨테이너의 각 요소에 대해 주어진 클로저를 호출합니다. 선언 (Declaration) func forEach(_ body: (Element) throws -> Void) rethrows 매개변수(Parameters) body body는 컨터에너의 요소를 매개변수로 사용하는 클로저 forin과의 차이점 for문으로는 몇 번 출력할 지 제어할 수 있지만 forEach는 컨테이너의 각 요소를 클로저에 던져 이용하기 때문에 요소의 수 만큼만 가능 break - continue은 반복문에서만 사용가능하기 때문에(왜냐면 fori.. 2022. 8. 17.