본문 바로가기

분류 전체보기

(383)
클로저 2편 클로저는 다음 2개를 말함 Named Closure func someFunc { print("Named Closure") } Named Closure는 그냥 함수라고 부름 Unnamed Closure let someClosure = { print("Unnamed Closure") } 이름을 붙이지 않고 사용하는 함수 = 클로저 클로저는 Named Closure & Unnamed Closure 둘 다 의미하지만, 보통은 Unnamed Closure라고 지칭함 ★ 클로저는 함수이기 때문에 1급 객체 함수의 특성 갖고 있음 ★ 클로저 표현식 키워드 "in"을 기준으로 전은 Closure Head 라고 부르고, 후는 Closure Body 라고 부름 { (Parameters) -> Return Type in 실..
클로저 1편 클로저란? 스위프트의 함수 정의 구문에서 목적에 따라 불필요한 부분을 제거 최대한 단순한 형태로 일회용 함수 역할을 하기 위한 객체 아래 코드에서 animations 매개변수로 exec의 함수를 받음 근데 exec라는 함수는 한 번만 사용되는 일회용 함수임 UIView.animate(withDuration: TimeInterval(0.15), animations: exec) 이와 같이 일회용 함수를 매번 만들기 귀찮기 때문에 animations의 타입과 동일한 경우라면 exec 함수 대신 클로저를 넣음 클로저 만들기 func add(value1: Int, value2: Int) -> Int { let result = value1 + value2 return result } 이미 함수라는 것을 알고 있기 ..
접근제어 접근제어 코드끼리 상호작용을 할 때 파일 간 또는 모듈 간에 접근을 제한할 수 있는 기능 접근제어의 필요성 캡슐화와 은닉화를 구현하는 이유는 외부에서 보거나 접근하면 안 되는 코드가 있기 때문 모듈과 소스파일 모듈은 배포할 코드의 묶음 단위 소스파일은 하나의 스위프트 소스 코드 파일 의미 접근수준 키워드 open public internal fileprivate private 접근수준 키워드를 통해 각 타입 (클래스, 구조체, 열거형 등)에 접근 수준 지정 가능 또는 타입 내부의 프로퍼티, 메서드. 이니셜라이저 등에도 접근 수준 지정 가능 공개 접근수준 => public public 키워드로 접근수준이 지정된 요소는 어디서든 사용 가능 파일의 내부는 물론 외부에서도 지정된 요소에 접근 가능 개방 접근수준..
탭 제스처 + 사진 선택 먼저 피커뷰 델리게이트 설정 //MARK: - 피커뷰 델리게이트 설정 extension DetailViewController: PHPickerViewControllerDelegate { // 사진이 선택이 된 후에 호출되는 메서드 func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { // 피커뷰 dismiss picker.dismiss(animated: true) let itemProvider = results.first?.itemProvider if let itemProvider = itemProvider, itemProvider.canLoadObject(ofClass: UIImage.self..
인스턴스 생성 및 소멸 6편 (인스턴스 소멸) 인스턴스 소멸 클래스의 인스턴스가 메모리에서 해제(소멸) 되기 직전에 호출 되는 메소드가 디이니셜라이저 "deinit" 키워드 사용 ★ 디이니셜라이저는 클래스의 인스턴스에서만 구현 ★ 스위프트에서는 인스턴스가 필요하지 않는다면 자동으로 소멸시킴 이 때 디이니셜라이저를 통해 별도로 전달할 내용이나, 저장해야 하거나 할 경우, 부가 작업을 지정해줄 수 있음 클래스에는 디이니셜라이저를 1개만 구현 가능 매개변수를 갖지 않고 소괄호도 적어주지 않음 디이니셜라이저 구현 class SomeClass { deinit { print("deinit") } } var someInstance: SomeClass? = SomeClass() someInstance = nil // deinit
알림창 안에 맵 넣기 먼저 UIViewController 타입의 "MapAlertViewController" 파일 생성 및 메인 스토리보드의 class로 설정 "MapAlertViewController" 파일 내에 버튼 추가 import UIKit class MapAlertViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 버튼 생성 let alertBtn = UIButton(type: .system) // 버튼 속성 설정 alertBtn.frame = CGRect(x: 0, y: 150, width: 100, height: 30) alertBtn.center.x = self.view.frame.width / 2 aler..
알림창 https://developer.apple.com/documentation/uikit/windows_and_screens/getting_the_user_s_attention_with_alerts_and_action_sheets Getting the user’s attention with alerts and action sheets | Apple Developer Documentation Present important information to the user or prompt the user about an important choice. developer.apple.com 기본 알림창 버튼 생성 import UIKit class ViewController: UIViewController { overr..
인스턴스 생성 및 소멸 5편 (함수를 사용한 프로퍼티 기본값 설정) 함수를 사용한 프로퍼티 기본값 설정 사용자 정의 연산을 통해 저장 프로퍼티 기본값을 설정하고자 한다면? 클로저나 함수 사용 가능 ※ 사용자 정의 연산? 사용자가 원하는 동작을 하는 연산자를 말함 정위 연산자 // 대표적인 예) 논리 부정 연산자 a = !a 중위 연산자 // 대표적인 예) 기본적인 연산자들 a + b 후위 연산자 // 대표적인 예) 옵셔널 관련 연산자 a? 인스턴스를 초기화할 때 함수나 클로저가 호출되면서 연산 결과값을 프로퍼티 기본값으로 제공 ★ 반드시 클로저 또는 함수의 반환 타입 = 프로퍼티의 타입 ★ 클로저를 통한 프로퍼티 기본값 설정 class SomeClass { let someProperty: SomeType = { // 새로운 인스턴스를 생성하고 사용자 정의 연산을 통해 반..