전체 글 165

메모 작성 화면 구현 (메모 저장)

메모 내용 및 이미지를 선택한 뒤에 저장 버튼을 눌렀을 때 메소드 구현 입력된 값을 저장하는 순서는 다음과 같음 1. 메모 내용이 입력되지 않았을 경우 대비, 경고창 띄움 ☆ 경고창에 버튼을 추가하고 싶다면? ☆ 원하는 버튼의 개수 만큼, UIAlertAction 클래스 객체를 생성 -> 등록 진행 2. 데이터를 저장할 MemoData 객체 생성 제목, 내용, 이미지, 작성 시간을 MemoData 객체에 전달 3. 앱 델리게이트 인스턴스를 불러온 뒤, memoList 배열 변수에 MemoData 객체 추가 UIApplication.shared는 UIApplication 객체의 인스턴스를 참조하기 위해 제공되는 타입 프로퍼티 UIApplication 객체는 직접 인스턴스 생성 불가, 시스템에 의해 생성된 ..

Project/Memo 2024.01.26

메모 작성 화면 구현 (카메라, 앨범 접근)

스토리보드에 정의된 메모 작성 화면 (아래 폭포수 이미지는 해당 위치에 이미지가 배치된다는 걸 알려주기 위해 일부러 넣음) 사용자가 카메라 버튼을 눌렀을 때 호출되는 액션 메소드 구현 // 카메라 버튼을 클릭했을 때 호출되는 메소드 @IBAction func pick(_ sender: Any) { let alert = UIAlertController(title: nil, message: "이미지를 가져올 곳을 선택해주세요", preferredStyle: .actionSheet) // 이미지 피커 인스턴스를 생성 let picker = UIImagePickerController() picker.delegate = self picker.allowsEditing = true alert.addAction(UIA..

Project/Memo 2024.01.26

메모 앱 기능 구현 (데이터 모델 작업)

간단히 메모 기능을 가진 앱을 개발해보려고 함 그럼 가장 먼저 해야 하는 일은 "데이터 모델"을 정의하는 것 (단, UI는 스토리보드로 미리 구현했다는 가정하에 진행) 여기서 데이터 모델은 사용자가 입력한 데이터를 저장 및 화면 출력의 용도로 형식이 있는 건 아니지만, 주로 클래스로 정의 데이터 모델을 작성하는 파일은 기본 파일 형식인 Swift File을 생성하여 파일 이름 설정 후, 파일 안에 작성 메모에 필요한 데이터 목록 1. 메모 구별값 2. 제목 3. 내용 4. 이미지 5. 작성일 import UIKit class MemoData { var memoIdx: Int? var title: String? var contents: String? var image: UIImage? var regdate..

Project/Memo 2024.01.26

리소스 접근 권한 설정 (카메라, 앨범)

iOS 10부터 디바이스의 개인 리소스 접근 제한이 강화됨 개발하려고 하는 앱의 앨범이나 카메라에 접근하려면 그에 맞는 권한이 필요함 Info.plist 파일을 통해 설정 Information Property List 항목에 새로운 항목 2개를 추가 새롭게 추가된 2개의 프라이버시 키는 앱이 사용자의 카메라나 앨범 리소스에 접근하기 위해 필요한 권한 이 설정은 접근 권한에 대한 설정일 뿐, 해당 설정을 통해서 카메라나 앨범을 실행시킬 수는 없음 단지, 프라이버시 키를 추가하지 않고 실행한다면? 오류 발생

iOS/UIKIT 2024.01.25

프로퍼티 4편 (타입 프로퍼티)

타입 프로퍼티 타입을 미리 정의하고, 해당 타입의 인스턴스가 생성되었을 때 사용하는 프로퍼티가 아닌, 타입 자체에 속하는 프로퍼티를 타입 프로퍼티라고 함 클래스, 구조체, 열거형에서 사용 인스턴스의 생성 여부와 상관없이 타입 프로퍼티의 값은 1개 타입 프로퍼티를 타입으로 하는 모든 인스턴스가 공통으로 사용하는 값 모든 인스턴스에서 공용으로 접근하고 값을 변경할 수 있는 변수 등을 정의할 때 유용 (싱글톤) 타입 프로퍼티는 저장 타입 프로퍼티, 연산 타입 프로퍼티가 있음 저장 타입 프로퍼티 변수, 상수로 정의 가능 및 선언할 당시 초기값을 가지고 있어야 함 이 때 지연 연산되는데, lazy 키워드를 붙일 필요 없음 연산 타입 프로퍼티 변수로만 정의 ※여기서 저장, 연산 프로퍼티 앞에 "static" 키워드..

iOS/Swift 2024.01.25

프로퍼티 3편 (프로퍼티 감시자)

프로퍼티 감시자 프로퍼티의 값 변경에 따라 작업을 구현할 수 있음 프로퍼티에 새로운 값이 할당 또는 변경 또는 변경된 값이 현재와 차이가 없더라도 호출되어 작업을 구현할 수 있음 프로퍼티 감시자는 지연 저장 프로퍼티에는 사용 못함 일반 저장 프로퍼티에 사용 또는 프로퍼티 재정의해 상속받은 저장 프로퍼티, 연산 프로퍼티에 사용 프로퍼티 감시자 메서드 프로퍼티의 값이 변경되기 직전에 호출하는 willSet 프로퍼티의 값이 변경된 직후에 호출하는 didSet 프로퍼티 감시자 class FruitInfo { var name: String = "what?" { willSet { print("now fruit: \(name), after fruit: \(newValue)") } didSet { print("now ..

iOS/Swift 2024.01.23

iOS 화면 표현 구조

디바이스 스크린에 하나의 화면만 표시 가능 다른 프로그램 실행되면 기존의 화면은 내려가고 그 자리를 새로운 화면이 대신 채움 윈도우 iOS에서 디바이스의 스크린을 빈틈없이 채우기 위한 객체 유저 인터페이스 표현 계층의 최상위에 위치 뷰의 일종이지만, 직접 콘텐츠를 가지지 않음 단지 콘텐츠를 갖는 뷰를 내부에 배치하여 화면에 출력하는 역할 만약에 화면이 전환된다면? 단지 윈도우 내부에 배치된 뷰 콘텐츠만 변경됨 (윈도우 객체 자체는 전환되지 않음) https://developer.apple.com/documentation/uikit/uiwindow UIWindow | Apple Developer Documentation The backdrop for your app’s user interface and t..

iOS/UIKIT 2024.01.22

프로퍼티 2편 (연산 프로퍼티)

연산 프로퍼티 특정 상태에 따른 값을 연산하는 프로퍼티 인스턴스 내/외부의 값을 연산하여 값을 돌려주는 접근자(getter) 역할 은닉화된 내부의 프로퍼티 값을 간접적으로 설정하는 설정자(setter) 역할 클래스, 구조체, 열거형에 연산 프로퍼티 정의 가능 (저장 프로퍼티는 클래스와 구조체에서만 정의) 연산 프로퍼티의 정의 var name: Type { // 접근자: 다른 저장 프로퍼티의 값을 얻거나 연산하여 리턴 get { statements return expr } // 설정자: 다른 저장 프로퍼티에 값을 저장 set(name) { statements } } 연산 프로퍼티의 사용 class Fruit { var name: String = "" var checkedName: String { get {..

iOS/Swift 2024.01.22

프로퍼티 1편 (저장 프로퍼티)

프로퍼티 클래스, 구조체 또는 열거형에 관련된 값이라는 의미 프로퍼티의 종류 "저장 프로퍼티" 인스턴스의 변수 또는 상수 의미 "연산 프로퍼티" 값을 저장하는 것이 아닌 특정 연산을 실행한 결과값을 의미 클래스, 구조체, 열거형에서 쓰임 "타입 프로퍼티" 저장 프로퍼티, 연산 프로퍼티는 특정 타입의 인스턴스에 사용되지만, 타입 프로퍼티는 특정 타입에 사용 "프로퍼티 감시자" 프로퍼티의 값이 변할 때 값의 변화에 따른 특정 작업 실행 저장 프로퍼티 클래스 또는 구조체의 인스턴스와 연관된 값을 저장 (var -> 변수 / let -> 상수) ▶ 구조체와 클래스의 저장 프로퍼티 구조체 저장 프로퍼티가 옵셔널이 아니더라도, 저장 프로퍼티를 포함하는 이니셜라이저를 자동 생성 클래스 저장 프로퍼티가 옵셔널이 아니면..

iOS/Swift 2024.01.19