Programing Language/Swift
-
(Swift) Property - didSet, willSet이란Programing Language/Swift 2019. 11. 5. 14:42
스위프트는 프로퍼티 옵저버로 didSet, willSet을 제공합니다. didSet은 프로퍼티 값이 변경되기 직전, willSet은 값이 변경된 직후를 감지하는 것입니다. 따라서, 이 때 원하는 작업을 수행할 수 있습니다. 참고로 프로퍼티 옵저버를 사용하기 위해서는 프로퍼티의 값이 반드시 초기화가 되어 있어야 합니다. 또한 클래스의 init()안에서 값을 할당할 때는 didSet, willSet이 호출되지 않습니다. (초기화 이후부터 프로퍼티를 감시) # didSet, willSet의 활용 프로퍼티 옵저버의 가장 빈번한 사용은 Model에서 갱신된 값을 View에 보여줄 때 입니다. 예를 들면, View에 점수를 표시하는 Label이 있다고 가정하고, 점수가 바뀔 때 마다 View의 Label을 업데이트..
-
(Swift)인스턴스 생성 / 소멸 (init / deinit)Programing Language/Swift 2019. 11. 5. 13:51
인스턴스를 생성하는 이니셜라이저와 클래스의 인스턴스가 소멸될 때 호출되는 디이니셜라이저, 그리고 이와 관련된 것들에 대해 알아봅니다. 프로퍼티 초기값 이니셜라이저 init 디이니셜라이저 deinit 1. 프로퍼티 초기값 스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 합니다. 프로퍼티에 미리 기본값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 됩니다. class PersonA { // 모든 저장 프로퍼티에 기본값 할당 var name: String = "unknown" var age: Int = 0 var nickName: String = "nick" } // 인스턴스 생성 let jason: PersonA = PersonA() // 기본값이 인스턴스가 ..
-
(Swift) assert / guard에 대해서Programing Language/Swift 2019. 10. 28. 15:02
:: assert / guard :: 애플리케이션이 동작 도중에 생성하는 다양한 연산 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있습니다. 1. Assertion assert(_:_:file:line:) 함수를 사용합니다. assert 함수는 디버깅 모드에서만 동작합니다. 배포하는 애플리케이션에서는 제외됩니다. 예상했던 조건의 검증을 위하여 사용합니다. var someInt: Int = 0 // 검증 조건과 실패시 나타날 문구를 작성해 줍니다 // 검증 조건에 부합하므로 지나갑니다 assert(someInt == 0, "someInt != 0") someInt = 1 //assert(someInt == 0) // 동작 중지, 검증 실패 //assert(someInt ..
-
(Swift) lazy 변수형 사용 방법Programing Language/Swift 2019. 10. 25. 12:04
애플에 공식문서는 다음과 같이 lazy 변수형 대해 설명하고 있다. "A lazy stored property is a property whose initial value is not calculated until the first time it is used" 리스트로 예를 들어 설명하면 리스트의 0번째 value가 읽히기 전까지는 메모리에 그 값을 할당시키기 않는다는 말이다. 다른 예 인스타그램을 예로 들어보도록 하겠습니다. 인스타그램을 실행시키면 가장 상단에 본인의 팔로워들의 아이콘들이 존재하고 이 아이콘을 클릭하면 해당 유저가 올린 스토리 영상을 확인할 수 있습니다. 여러분이 인스타그램을 실행시켰을 때 이러한 영상들도 모두 서버로부터 가져오는 작업을 할까요? 만일 여러분이 어플리케이션을 실행하는 ..
-
(Swift) 클래스,구조체/ 열거형 차이Programing Language/Swift 2019. 10. 15. 22:40
- 예시 코드 struct ValueType { var property = 1 } class ReferenceType { var property = 1 } // 첫 번째 구조체 인스턴스 let firstStructInstance = ValueType() // 두 번째 구조체 인스턴스에 첫 번째 인스턴스 값 복사 var secondStructInstance = firstStructInstance // 두 번째 구조체 인스턴스 프로퍼티 값 수정 secondStructInstance.property = 2 // 두 번째 구조체 인스턴스는 첫 번째 구조체를 똑같이 복사한 // 별도의 인스턴스이기 때문에 // 두 번째 구조체 인스턴스의 프로퍼티 값을 변경해도 // 첫 번째 구조체 인스턴스의 프로퍼티 값에는 영향이..
-
(Swift) 구조체 정리Programing Language/Swift 2019. 10. 10. 14:09
1. 구조체란? 스위프트 대부분 타입은 구조체로 이루어져 있습니다. 구조체는 값(value) 타입입니다. 타입이름은 대문자 카멜케이스를 사용하여 정의합니다. 2. 구조체 문법 구조체 정의 : "struct" 키워드 사용 struct Sample { // 가변 프로퍼티(값 변경 가능) var mutableProperty: Int = 100 // 불변 프로퍼티(값 변경 불가능) let immutableProperty: Int = 100 // 타입 프로퍼티(static 키워드 사용 : 타입 자체가 사용하는 프로퍼티) static var typeProperty: Int = 100 // 인스턴스 메서드(인스턴스가 사용하는 메서드) func instanceMethod() { print("instance method..
-
(Swift) 옵셔녈[Optional] 정리 2/2Programing Language/Swift 2019. 10. 10. 12:23
1. 옵셔널 추출이란? 옵셔널에 들어있는 값을 사용하기 위해 꺼내오는 것 2. 옵셔널 방식 옵셔널 바인딩 1. nil 체크 + 안전한 추출 2. 옵셔널 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내옵니다. 3. if-let 방식 사용 func printName(_ name: String) { print(name) } // 함수를 선언할때 _ 문자를 넣게 되면 나중에 그 함수를 불러올때 변수명을 적어 주지 않아도 된다. var myName: String? = nil //printName(myName) //(만약 func printName(_ name: String) { print(name)} 에서 _을 넣지 않았따면) //printName(name : myName) 이라고 적어야한다. // 전달되는..
-
(Swift) 옵셔녈[Optional] 정리 1/2Programing Language/Swift 2019. 10. 10. 12:04
1. 옵셔널이란?? 값이 있을 수도, 없을 수도 있음을 표현 nil이 할당 될 수 있는지 없는지 표현 // someOptionalParm에 nil이 할당 될 수 있다. func someFunction(someOptionalParam: Int?) { // .... } /// someOptionalParm에 nil이 할당 될 수 없다. func someFunction(someOptionalParam: Int) { // .... } someFunction(someOptionalParam: nil) // someFunction(someParam: nil)