[프로토콜] UITextFieldDelegate 공식문서 뜯어보기
·
📱 iOS/UIKit
학습 목표 Delegate 디자인 패턴을 익힘 UITextFieldDegate 프로토콜을 익힘 학습 내용 Delegate 디자인 패턴 객체가 자신의 기능을 다른 객체에게 위임하여 기능을 실행하는 것 Delegate는 프로토콜로 구현됨, *(Delegate) = 위임하다 UITextField NSObject - UIResponder - UIView - UIControl - UITextField 위 사진의 예로 이번 UITextFieldDelegate를 설명하겠다. UITextField에 글자를 입력 바꾸기 버튼을 누름 UILabel에 1번에서 작성한 글자가 보이게 됨 UITextFieldDegate @MainActor protocol UITextFieldDelegate UITextField에서 발생하는 이..
[Xcode] .xcconfig 충돌로 인한 Xcode 무한팅김 현상을 겪고서
·
📱 iOS/Xcode
[문제상황] - 내가 끄는게 아니다. 강제로 꺼지는 거임 (메모리에서 아예 날라가버림) - 해당 프로젝트만 문제이다. - 해당 프로젝트 내에서도 'Info - Resource tags'와 'Info - Open As - Source code', '모든 xcconfig 확장자 파일'에서만 팅김 - 추가로 모든 .xcassets이 고장나버림.. (구글링해보니 복사 해두고 삭제했다가 다시 로드하라함) failed to read asset tags: The command '~~' 모든 xcconfig 확장자 파일 및 Info 내에서 Xcode 무한팅김 현상 [해결을 위한 노력] - 똑같은 과정으로 새 레포 파서 xcconfig 파일을 충돌내려고 노력했음 (근데 테스트할 때는 이유를 모르겠으나 잘 돼 버림) - ..
[Swift] 제네릭 대신 Any 타입을 사용하면 안될까 ?
·
📱 iOS/Swift
결론 1. Int면 Int끼리, String이면 String끼리 교환하고 싶은데 제약을 못 걸어줌 2. Any로 매개변수를 받는다면, 전달인자에 Any로 전달되어야 함 3. Any 타입을 넣어 호출하는데, 이 순간 값이 복사되어 할당됨 (새 변수로만 함수를 호출한다는 뜻) Any, AnyObject 스위프트에는 특정 타입을 지정하지 않고 여러 타입의 값을 할당할 수 있는 Any와 AnyObject라는 특별한 타입이 있다. Any는 함수 타입을 포함한 모든 타입을 뜻하고, AnyObject는 클래스 타입만을 뜻한다. 제네릭 (Generic) 제네릭은 스위프트의 어떤 타입에도 유연하게 대응할 수 있으며 코드의 중복을 줄이는 기능이다. [이전 글 참고] https://kyxxn.tistory.com/39 [S..
[Swift] 제네릭 문법
·
📱 iOS/Swift
제네릭 제네릭은 스위프트의 어떤 타입에도 유연하게 대응할 수 있으며 코드의 중복을 줄이는 기능이다. 또한, 제네릭으로 구현한 기능과 타입은 재사용에도 쉬우며 Array, Dictionary, Set 등의 타입은 모두 제네릭 컬렉션이다. import Foundation func swapTwoInt(_ a: inout Int, _ b: inout Int) { let tmp: Int = a a = b b = tmp } var intOne: Int = 10 var intTwo: Int = 50 print("intOne : \(intOne) | intTwo : \(intTwo)") swapTwoInt(&intOne, &intTwo) print("intOne : \(intOne) | intTwo : \(intTwo..
[백준] 7576, 토마토 (Swift)
·
🖥️ Computer Science/Algorithm
- 일반적인 bfs 사용 시 시간초과 발생 - Queue에 pop 하여 원소를 빼내지 말고, 인덱스적 접근을 할 것 (시간초과 확보 가능) - 입력으로부터 graph 만드는 능력이 아직 부족함 // 24년 겨울 알고리즘 스터디 // BOJ & 프로그래머스 // // Created by 박효준 on 1/10/24. // bfs 탐색 import Foundation let MN = readLine()!.split(separator: " ").map{Int(String($0))!} let M = MN[0], N = MN[1] var graph: [[Int]] = [] let mx = [0,0,-1,1], my = [-1,1,0,0] for _ in 0..= 0 && ny < M { if graph[nx][ny..
[Swift] 클로저(Closure) 간소화 표현, 값 획득, 탈출 클로저
·
📱 iOS/Swift
클로저 표현 간소화 문맥을 이용한 타입 유추 let reversed: [String] = names.sorted { (s1, s2) in return s1 > s2 } 클로저는 메소드가 요구하는 형태로 전달해야 함 매개변수 타입과 개수, 반환 타입 등이 같아야 전달인자로 전달되므로 클로저는 이미 적합한 타입을 준수한다고 유추할 수 있기에 생략해도 됨 단축 인자 이름 let reversed: [String] = names.sorted { return $0 > $1 } 간결한 표현을 통해 매개변수 이름 생략가능 in 키워드도 안 적어도 됨 암시적 반환 표현 let reversed: [String] = names.sorted { $0 > $1 } 클로저가 반환 값을 갖는 클로저이고, 클로저 내부의 실행문이 단..
[Swift] 클로저(Closure) 기본 클로저와 후행(트레일링) 클로저
·
📱 iOS/Swift
💡 우리가 여태껏 말해온 모든 함수는 ‘클로저’이다. 클로저 형태 이름이 있으면서 어떤 값도 획득하지 않는 전역함수 형태 이름이 있으면서 다른 함수 내부의 값을 획득할 수 있는 중첩된 함수의 형태 이름이 없고 주변 문맥에 따라 값을 획득할 수 있는 축약 문법으로 작성한 형태 공식문서 발췌 1. Global functions are closures that have a name and don’t capture any values. 2. Nested functions are closures that have a name and can capture values from their enclosing function. 3. Closure expressions are unnamed closures written ..
[UIKit] Interface Builder Outlet 연결 Strong || Weak
·
📱 iOS/UIKit
View는 스토리보드 코드간의 연결을 위해 @IBOutlet을 통해 해결한다. 스토리보드에서 Ctrl + 좌클릭으로 UI 객체를 코드에 끌어놓으면 다음과 같이 자동으로 생성해준다. 위 사진에서 알 수 있는 점 1. Outlet 연결됨 2. 변수 명을 입력할 수 있음 3. Storage를 'Strong'과 'Weak' 중에 고를 수 있고, Default는 Weak임' 4. UI 객체는 내가 Ctrl + 좌클릭으로 가져온 Type으로 자동 선정됨 변수 명을 입력하면 알아서 '@IBOutlet weak var myLabel : UILabel!'로 선언된다. 3번에서 말한 Strong과 Weak는 강한 참조, 약한 참조로 ARC와 관련이 있다. 클래스의 인스턴스는 힙 영역에 저장되고, 이는 ARC에 의해 참조 ..
[UIKit] 마주한 첫 번째 에러 (this class is not key value coding-compliant for the key)
·
📱 iOS/UIKit
"this class is not key value coding-compliant for the key" ... "libc++abi: terminating due to uncaught exception of type NSException" TextField, Label, Button 컴포넌트밖에 사용하지 않았는데, ViewController 코드 상에 문제가 없는데 컴파일하면 에러가 발생한다. 결론부터 말하자면 Swift파일의 @IBOutlet || @IBAction의 연결이 끊여졌을 때 발생하는 런타임 에러이다. 상황 1. 스토리보드 view에 Label과 TextFild, Button을 배치함 'view.backgroundColor = .purple'은 시뮬레이션에 잘 연동됐는지 디버깅 용 2. 스토..
[자격증] 리눅스마스터 2급 후기 + 학점은행제 신청
·
🎸 기타
리눅스마스터 2급 시험은 2023년 12월 9일 토요일이다. 해커톤 + 기말 + 리눅스마스터 2급 시험 이 모든 걸 12월 초에 몰아서 하느라 바쁘게 살긴 했다. 리눅스마스터 2급 자격증 시험을 치겠다고 다짐한 건 3가지 이유 1. 리눅스 과목이 재밌어서, 나에게 도움이 많이 됐어서 더 알아보고자 2. 리눅스 수업해주시는 교수님이 좋아서 3. 학점은행제로 5학점 + 리눅스활용및프로그래밍 과목 0.5 학점 증가 위 이유들로 나는 바쁜 스케줄임에도 불구하고 리눅스마스터 2급을 치기로 했다. 나는 일정이 많아 리눅스마스터 공부를 미루고 미루다 결국 전날 목요일부터 공부하기 시작했다. 사실 목요일도 바빠서 "내일(금)은 리눅스마스터만 공부할 거야. 내 상태를 지금 미리 봐보고 사태의 심각성과 공부법을 정해두자"..