결론부터 말하자면 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..
객체지향 생활체조에서 원시값을 모두 감싸라는 규칙에 관해 어떤 식으로 구현해야 할지 고민하고 있을 때 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가..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.