결론부터 말하자면 lazy와 weak를 동시에 사용할 경우 객체가 즉시 해제되어서 정상적으로 작동할 수 없으므로 컴파일 오류가 뜬다. lazy 프로퍼티 lazy 프로퍼티는 처음 객체가 생성될때 초기화 되는 것이 아닌 해당 프로퍼티가 사용될 때 초기화 되는 프로퍼티 weak 해당 프로퍼티가 약한 참조로 Reference Counter를 올리지 않게 되며, 해당 객체가 런타임 도중 할당이 해제되면 해당 프로퍼티는 nil값으로 변경된다. lazy 와 weak를 같이 쓴다면 class B { var hello = "Hello" } class A { lazy weak var b: B? = B() func asd() { print(b!.hello) } } let a = A() 이런 코드가 있다고 해보자. 여기서 A..
프로토콜은 자기 자신을 채택하고 있지 않다 protocol P {} struct S: P {} let arr:[P] = [S()] func genericFunc(a: [T]) -> [T] { return a } genericFunc(a: arr) // Error: Type 'any P' cannot conform to 'P' 프로토콜은 자기 자신을 채택하고 있지 않다. 따라서 제네릭의 타입 제약을 프로토콜을 채택한 것으로 제약을 걸어 두었을 때, 컴파일 시 오류가 뜬다. 즉 프로토콜 P는 프로토콜 P를 채택하고 있지 않아서 제네릭 제약조건인 P를 채택한 타입에서 걸려서 오류가 발생한다. protocol P {} struct S: P {} let arr:[P] = [S()] func nonGenericFu..
UICollectionView, UITableView는 프로젝트를 진행할 때 매우 많이 사용하고, 이 둘은 UIScrollView를 상속하고 있다. UIScrollView도 많이 사용해 보긴 했지만... 쓸 때마다 정확히 알아보지도 않고 사용해서 테이블 뷰의 페이징 기능을 구현해 보려고 할 때 좀 정확하게 알아야겠다 싶어서 알아보게 되었다. UIScrollView의 작동 방식 UIScrollView는 UIView와 크게 다르지 않다. frame이 있고, bounds가 있다. frame은 해당 뷰의 원점이 해당 뷰의 원점으로부터 얼만큼 떨어졌는지를 좌표계로 나타낸 것이고, bounds는 자기 자신의 원점을 기준으로 좌표계로 나타낸 것이다. 이때 부모뷰의 bounds의 원점을 변경 하면 자식뷰의 frame이..
객체지향 생활체조에서 원시값을 모두 감싸라는 규칙에 관해 어떤 식으로 구현해야 할지 고민하고 있을 때 nameSpace에 관해 알아보라는 조언을 받았다. namespace란? namespace를 구글링해보면 C++의 NameSpace가 가장 많이 나온다. C++의 namespace의 개념을 간단하게 말하면 같은 것 끼리 모은 공간을 만들고, 모은 공간이 다르면 다른 것으로 치는 것이라고 생각하면 될 듯하다. 네트워크의 NAT의 개념과 비슷하게 생각하면 될 듯? swift에서는 상수를 감싸서 상수 대신 감싼 변수명을 입력하는 식으로 사용한다. 왜 사용하는가? iOS로 프로젝트를 진행하면 무수히 많은 상수를 사용합니다. 오토레이아웃을 잡을때, 애니메이션을 사용할 때, UserDefaults를 사용할 때 등등..
왜 사용하는가?프로퍼티에 접근할 때, 사람들은 공통적인 패턴으로 접근 함lazy를 통한 value initalizedThread-local stroage를 사용할 때UserDefaults등등... 어떤 프로퍼티에 접근할때 get이나 set를 사용하지만 코드가 반복될 때가 있는데 property wrapper를 통해 재사용성을 높이고 중복을 없앨 수 있음 사용법@propertyWrapper struct TwelveOrLess { private var num: Int = 0 var wrappedValue: Int { get { return num } set { num = min (newValue, 12) } } init(wrappedValue: Int) { self.wrappedValue = wrappedV..
iOS에서 화면에 보이는 모든 것들은 UIView를 서브클래싱 하고 있다. 이런 UIView의 생김새를 변경하거나 어떤 효과를 줄 때 layer를 통해 작업을 수행한다. cornerRadius, shdow, Animation 등 의 작업할 때 항상 layer가 등장한다. layer가 무엇이길래 UIView와 함께 자주 등장할까? UIView의 layer 공식문서에서는 렌더링에 사용되는 CoreAnimation의 layer (CALayer) 이고, view는 이 layer의 delegate라고 한다. UIView는 하나 이상의 layer를 가지고 있다고 한다. 렌더링은 무엇이고, CoreAnimation은 어떤 것이고, CALayer은 어떤 클래스이며 CALayerDelegate가 무엇이길래 UIView가..