일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 클린 코드
- 스위프트
- tableView
- rxswift
- uiscrollview
- UICollectionView
- ios
- map
- UITextView
- clean architecture
- swift documentation
- SWIFT
- 애니메이션
- 리펙터링
- Human interface guide
- collectionview
- Protocol
- RxCocoa
- Xcode
- Refactoring
- Clean Code
- 리팩토링
- MVVM
- combine
- Observable
- HIG
- uitableview
- 리펙토링
- swiftUI
- ribs
- Today
- Total
목록closure (7)
김종권의 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
@autoclosure 함수에 argument가 전달될 때 closure가 자동으로 생성되게끔 하는 키워드 함수의 argument에 closure를 넘길 때, block으로 감싸지 않고 그냥 넘겨도 되게끔하는 키워드 ex) @autoclosure 사용 class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.someFunction(print("this is closure")) } func someFunction(_ someArgument: @autoclosure () -> ()) { print("start") someArgument() print("end") } } /* start this ..
Closure Closure(폐쇄): 클로저는 코드에서 전달 및 사용할 수 있는 2가지의 자체 기능을 가진 블록 정의된 컨텍스트에서 모든 상수 및 변수에 대한 참조를 캡쳐하고 저장 가능 캡쳐: 자신의 블록 외부에 있는 값을 참조하는 것 // ex) 캡쳐: incrementer() 함수 블록에서 runningTotal과 amount인수를 참조 func makeIncrementer(forIncrement amount: Int) -> () -> Int { var runningTotal = 0 func incrementer() -> Int { runningTotal += amount return runningTotal } return incrementer } Closure는 실행 순서 제어가능 클로저는 호출할 ..
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..