본문 바로가기

모바일앱/Swift78

mutating 과 구조체 참고: https://velog.io/@wook4506/iOS-Swift-Swift-문법을-알아보자-18편-mutating Class && Struct && Enum 미완 enum추가 기존 글에서 클래스는 참조타입이고 구조체와 열거형은 값 타입이라고 정리를 했다. 그래서 값타입인 구조체에서는 인스턴스 메소드 내에서 프로퍼티들을 수정할 수 없게 되어있다. 때문에 이 프로퍼티들을 구조체 안에 있는 메소드에서 수정을 하려면 mutating이라는 키워드를 사용해야한다. mutating 특정 메소드 내에서 구조체 또는 열거형의 프로퍼티를 수정해야하는 경우, 해당 메소드의 동작을 변경하도록 하는 것 예시를 보면 Person이라는 구조체에서 init을 통해 초기화를 해주어서 완벽한 코드처럼 보이지만 에러가 발생한다... 2022. 4. 13.
[ios] shortening unwrapping 쇼트닝 언래핑 swift5.7 Swift 5.7에서 반영될 Unwrapping과정 번역: https://betterprogramming.pub/swift-5-7-unwrapping-optionals-gets-improvement-be81c578e9fa 현재 Xcode 13.3에서 지원안함 Shadowing이란 옵셔널 x를 풀었을 때 동일한 값을 포함하는 x라는 이름의 새 상수를 만들었고 이제 옵셔널 변수 대신 이 상수를 사용합니다. var x: Int? if let x = x { // do something with the new x } 이러한 작업을 shadowing 이라고 합니다. 📌섀도잉은 좋은걸까? 셰도잉에는 몇가지 단점이 있습니다. 현실적인 상황에서는 변수가 훨씬 긴경우가 많다. var lastTimeUserEnteredTh.. 2022. 4. 12.
TIL220324_에러처리 Do try catch TIL220324_DoTryCatch Category: isGrammer Langu: Swift Tag: API, JSON isGrammer: No isOK: No isPosted: No isRad: No isRead: No isSecret: No 공부날짜: 2022년 3월 24일 생성일시: 2022년 2월 25일 오후 3:59 선행지식: Codable, EscapeClosure, HTTP, OptionalBinding, URLSession 최종편집: 2022년 3월 24일 오후 4:59 추가개념?: No 환경: Xcode 서론 선행 지식 오류처리의 과정 오류 처리에는 다음 세 가지 과정이 필요합니다. 오류의 종류 정의하기 발생한 오류 던지기 던진 오류 처리하기 1. 오류의 종류 정의하기 (선택사항) .. 2022. 3. 24.
안전하게 배열에 접근하는 3가지 방법 📌 안전하게 배열에 접근하는 방법 -> 하단의 2번째 방법을 함수화한 방법 일반적으로 배열에 index를 통해 접근하는 상황을 최소화해야하는 것이 옳지만 어쩔 수 없는 상황이 발생하곤 한다. Swift에서는 좀 더 안전한 처리를 위해 함수 단에서 guard를 지원합니다. 하지만 Array의 경우 index를 통해 접근해서 가져오는 값이 Optional타입이 아니기 때문에 접근하는 index가 유효하지 않은 경우에는 꼼짝없이 Fatal error: Index out of range 메세지가 발생합니다. let arr = [1,2,3,4] arr[4] // Fatal error: Index out of range 예를 들어 API통신을 통해 배열이 생성되는데 생성한 배열에 값이 추가 되지않은 경우, 호출을 .. 2022. 3. 10.
Codable 오늘의 회사업무에서는 처음으로 Codable을 사용했습니다. Codable은 Encodable과 Decodable이라는 두가지를 가지고 있습니다. 조금 친숙한 단어로 말하자면, 인코딩, 디코딩을 말합니다. 그러면 무엇을 인코딩 디코딩 하느냐? Apple 공식 문서에 따르면 외부 표현(external representation) 이라고 하는데 그냥 json이라고 생각하면 된다. json은 우리가 무언가를 인터넷에서 할 때, 사용할 특정 정보를 담고 있다. 예를 들어 내가 사이트에 로그인을 입력한다고 가정해보면. 로그인을 하는 순간그냥 뿅 끝나는 것이아니라. 사이트에 나의 정보들이 담기기 시작한다. 내 컴퓨터엔 내 정보가 항상 저장되어있는게 아니다. 사이트는 빈껍데기였다가 내가 로그인 하는 순간. 아~ 기꼬.. 2022. 2. 11.
CustomCell 만들기 (미완성) - ViewController 준비 + Identity inspector에 class 설정 - TableView 배치 + AutoLayout - TableViewCell을 TableView에 배치 - Cell 선택 - Attribute Inspector에 Identifier에 이름설정 - UI요소로 만들어둔 TableViewCell과 IBOutlet 링크하기 - CustomCell 세부 UI 설정 -> 넣고싶은 것들 넣기 (미완성) 2021. 12. 26.
와일드카드 식별자 와일드카드 패턴이란? - 값을 해체하거나 무시하는 패턴중 하나입니다. - 매개변수에서 많이 사용했던 와일드카드 식별( _ )을 사용한다는것은 이 자리에 올것이 무엇이든 상관하지 말라는 뜻입니다. - 와일드카드 식별자가 위치한 곳의 값은 무시해라라는 뜻 - 이 패턴은 for구문이나, switch구문에 많이 사용됩니다. switch구문에서의 사용 let string: String = "ABC" switch string { case _: print(string) } let optionalString: String? = "ABC" switch optionalString { case "ABC"?: print(optionalString) //optional("ABC")가 출력 case _?: //ABC빼고 나머지 .. 2021. 12. 20.
for 문에서의 제어전달문 보충 for num in 0...8 { if num % 2 == 0 { continue } print(num) } // 결과: 1, 3, 5, 7 for num in 0...8 { if num % 2 == 0 { break } print(num) } // 결과: 0, 1, 2 var sum = 0 for i in 0...10{ if i == 3 { break } print("\(i)") sum += 1 } print("sum: \(sum)") // sum: 3 2021. 12. 16.
중첩함수 보충 // 중첩함수 보충 // 함수 안에 함수를 선언 func outer() { print("outer") func inner() { print("inner") } } // 함수 안에 함수를 선언 func outer() { print("outer") func inner() { print("inner") } inner() } //outer 함수가 inner함수를 리턴, 외부에서 사용 func outer() -> () -> () { print("outer") func inner() { print("inner") } return inner } let inner = outer() inner() 2021. 12. 16.
옵셔널 바인딩 보충 // if let guard let 보충 var isTodayLunch: String? = "된장찌개" if let foodName = isTodayLunch{ print(foodName) } else { print("오늘 점심은 뭐 먹지?") } func isTodayLunch() { var foodName: String? foodName = "김치찌개" guard let name = foodName else { print("오늘 점심은 뭐 먹지?") return } print(name) } isTodayLunch() 2021. 12. 16.