일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- UITextView
- uiscrollview
- tableView
- MVVM
- HIG
- Xcode
- 클린 코드
- Clean Code
- swiftUI
- ribs
- 스위프트
- 리팩토링
- 리펙터링
- combine
- map
- clean architecture
- collectionview
- 애니메이션
- SWIFT
- RxCocoa
- swift documentation
- uitableview
- ios
- UICollectionView
- Observable
- 리펙토링
- rxswift
- Human interface guide
- Refactoring
- Protocol
- Today
- Total
목록클로저 (8)
김종권의 iOS 앱 개발 알아가기
모두 알고 있는 클로저 의미 돌아보기다른 부분으로 전달할 수 있는 독립적인 코드 블록{ (매개변수) -> 반환형 in 실행 코드} ex) 클로저 예시 - 기능 실행let sayHello = { (name: String) -> String in return "Hello, \(name)!"}sayHello("Jake") // "Hello, Jake" ex) 클로저 예시 - 기능 제공let multiply = { $0 * $1 }print(multiply(4, 5))이처럼 클로저는 다른 부분으로 전달할 수 있고 그 것을 저장하여 실행을 지연시킬 수 있는데 여러가지 사용처가 존재설계 관점에서의 클로저설계 관점에서의 클로저의 역할은 해당 기능을 사용하려는 쪽에 위임 하는 행위의 의미를 가지고 있음커스텀..
1. 클로저를 사용할 때 주의할 점 - Memory Leaks, Retain Cycle, nested closure 첫 번째2. 클로저를 사용할 때 주의할 점 - nested closure 두 번째3. 클로저를 사용할 때 주의할 점 - nested closure 세 번째nested closure에서 weak로 잡지 않는 경우closure가 두 번 생길 때 아래와 같은 경우가 존재ss.instance?.f1 클로저 안에 ss.instance?.f2가 있고, 모두 RxSwift에서 제공하는 연산자 subscribe(with: self)로 접근함으로써 self는 weak로 잡은 상태weak var instance: SomeClass?button.rx.tap .subscribe(with: self) { s..
함수로 정의 vs closure로 정의 보통 코드를 작성하다가 중복 작업이 있을 때나 로직이 여러개가 들어갈 때, 하나의 일은 하나의 함수에서 하기 위해서 별도의 함수를 정의하여 그 함수를 호출하도록 구현 하지만 이렇게 함수를 만들때, 다른곳에서는 사용하지 않고 현재 위치에서만 사용하는 경우가 존재 // 리펙토링 전 func workA() { // A work // B work
1. 클로저를 사용할 때 주의할 점 - Memory Leaks, Retain Cycle, nested closure 첫 번째2. 클로저를 사용할 때 주의할 점 - nested closure 두 번째3. 클로저를 사용할 때 주의할 점 - nested closure 세 번째Memory Leak이란?메모리에 할당 되었지만, 절대 release되지 않고 reference되지 않는 것이것을 참조할 수 없기 때문에 절대 release할 수 없는 상태Retain Cycle이란?생성자가 할당 해제된 후에도 인스턴스가 할당 해제되지 않도록 하는 reference 상 순환을 이루는 상태둘 이상의 인스턴스가 서로에 대한 strong 참조를 보유할 때 발생retain cycle이 발생하지 않는 케이스UIView.animate..
1. 클로저표현식 : 익명함수, 주변 환경으로부터 값을 "캡쳐"(휘발성인 지역변수의 값이 저장되는 것)할 수 있는 경량 문법 즉, 클로저라는 것은 리턴된 타입(어떤 함수의 종료)을 참조할 때, 함수가 이미 종료된 시점에서 특정 변수를 참조하는 것 - 클로저표현식은 익명함수로 생각하면 편함 - func키워드, 함수이름 제거한 후 나머지만 표현 1) 기본 사용법 // 대입 후 실행 let a = { (v1: Int, v2: Int) -> Void in print("value1 = \(v1), value2 = \(v2)") } a(1,2) // 바로 실행 ({ (v1: Int, v2: Int) -> Void in print("value1 = \(v1), value2 = \(v2)") }) 2) 생략 // 정..
1. 함수 - 인자레이블 : 매개변수 이름 1 2 3 4 5 6 7 8 9 10 func myFunc(myValue: Int, myValue2: Int) -> (String, Int) { var ret : (String, Int) = (String(myValue + myValue2)!, myValue1) return ret } // myValue, myValue2가 인수레이블 myFunc(myValue: 123, myValue2: 13) // 함수호출방법 1 myFunc(myValue:myValue2:)(123, 13) //함수호출방법 2 - 위에서 함수 이름은, myFunc(myValue:myValue2) - defer 블록 : 함수안에서 return을 만나기 전에 defer블록을 만나게 되면, ret..
1. 변수 1). 타입 어노테이션(type annotation) : 타입을 명시적으로 선언 - 런타임 에러 방지 ( 컴파일 에러로 대체) 1 var age: Int = 1234 // "Int"와 같이 콜론 뒤에 써주는 자료형을 타입 어노테이션이라 함 2). 변수 이름 - 스위프트에서는 모든 문자 및 이미지까지 사용 가능 1 2 3 var myValue = "ffas" var 123 = "ffas" var ♠ = "ffas" - 가독성을 위해 낙타와 같은 모양을 띄고 있다고 하는 Camel형으로 작성하는것을 일반적으로 함 var myValueMyStyle = 123 - 상수는 var 대신에 let으로 선언 3). Int사용 - Int8, Int16과 같이 명시적으로 할 수 있지만, 숫자를 안붙이고 Int만..
1. 정적 바인딩 언어 파이썬과 같이 데이터 타입 추론 기능이 있지만, 스위프트는 정적 바인딩 언어 let myValue = 24 let myValue : Int = 24 2. 프로토콜 자바의 인터페이스 기능과 동일 1 2 3 4 protocol myProtocol { var myValue : String { get } mutating func adjest() } 3. 튜플 함수나 메소드에서 두 개 이상의 값을 반환해야 한느 경우, 모아서 하나의 객체로 반환 1 2 3 4 func getItem() -> (Int, Int, Double) { return (1, 2, 3.5) } var myValue : (Int, Int, Double) = getItem() 4. 클로저(Closure) 함수를 1급 객체로..