일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 오라클
- Spring
- IOS
- CD
- 프로그래밍언어론
- 리눅스
- libasm
- JPA
- 네트워크
- javascript
- 오블완
- swift
- 스프링
- sql
- springboot
- 인공지능
- DBMS
- Xcode
- 데이터베이스
- 스프링부트 웹 소켓
- 티스토리챌린지
- AI
- CI
- jenkins
- 42seoul
- MySQL
- 다이어리
- 스프링부트
- 아이패드다이어리
- 소켓
- Today
- Total
목록IOS (12)
Hi yoahn 개발블로그
1. Cocoa Touch Class vs Swift File 차이 Xcode에서 프로젝트를 생성한 뒤 파일을 만들 때 어떤 경우에는 Cocoa Touch class 를 선택해서 파일을 만들고 어떤 경우에는 Swift File 을 선택해서 만드는 게 있었는데 무슨 차이인지 헷갈려서 정리해둔다. 사실 생각보다 간단하고 별거 없음.. New File - Cocoa Touch Class 를 선택하면 아래와 같은 창이 나온다. 중간에 있는 Subclass of 레이블 옆의 선택 박스에서 UI 프레임워크, Xcode에서 제공되는 iOS를 위한 클래스들 중, 상속받을 클래스를 선택하여 파일을 생성하면 선택한 클래스를 상속한 상태의 코드를 바로 보여준다. Swift File 은 그냥 스위프트 언어를 사용하기 위한 파..
포커게임 앱 만들기를 하면서 레이아웃 잡는 과정이 오래걸렸는데 해결하기까지의 과정을 적어본다. 1. origin 과 frame, bounds의 차이 origin - 절대 위치 frame - 뷰의 좌표가 부모 뷰를 기준으로 결정됨 - 뷰가 회전하면 그 뷰를 감싸고 있는 frame은 회전하지 않고 그에 맞춰 크기와 좌표가 바뀜 bounds - 본인의 좌표계에 의해 위치가 정해지기 때문에 항상 (0, 0) 을 유지 - bounds는 뷰의 width와 height 를 알기 적합하다 - 뷰가 회전해도 회전된 뷰의 width나 height는 변하지 않음 2. SafeArea 확인 let topPadding = UIApplication.shared.windows[0].safeAreaInsets.top let bott..
jiyeonlab.tistory.com/8 [iOS] Segue 연결 방법 [iOS] Segue 연결 Segue 란 iOS에서 여러 ViewController 사이의 전환 시에 사용하는 객체이다. 나는 보통 인터페이스 빌더에서 직접 연결하는 방법을 썼었다. 이렇게 하면 ViewController 간의 연결관계를 직 jiyeonlab.tistory.com 스토리보드에서 Ctrl 을 누르고 바로 연결하는 직관적인 방법도 있지만, 코드를 사용하는 방법도 있다. Segue의 Identifier 설정 후, 코드에서 performSegue() 1. 스토리보드에서 Segue 연결 YellowViewController 에서 연결 2. Segue 화살표를 누르고, Inspector 탭에서 Segue의 Identifier..
1. UILabel 클래스 속성 .textAlignment .left / .right / .center .justified : 행 맞추기 .natural : 지역화 기준으로 정렬 .baselineAdjustment .alignCenters : 글자가 View Bound 세로 기준으로 중앙 정렬 .alignBaselines : 글자의 아래부분이 정해진 위치 기준으로 정렬 .none : 글자가 View Bound 세로 기준으로 좌상단 정렬 (default) .numberOfLines Label 에서 출력가능한 line 수를 정합니다. 0 은 제한이 없음을 표시합니다. AttributedString 의 경우도 마찬가지로 적용이됩니다. .adjustFontSizeToFitWidth YES 로 설정한 경우, La..
1. 오류처리 스위프트에서 오류(Error)는 Error라는 프로토콜을 준수하는 타입의 값을 통해 표현됩니다. Error 프로토콜은 사실상 요구사항이 없는 빈 프로토콜일 뿐이지만, 오류를 표현하기 위한 타입(주로 열거형)은 이 프로토콜을 채택합니다. 스위프트의 열거형은 오류의 종류를 나타내기에 아주 적합한 기능입니다. 연관 값을 통해 오류에 관한 부가 정보를 제공할 수도 있습니다. 1.1 오류 표현 Error 프로토콜과 열거형을 통해서 오류를 표현 enum VendingMachineError: Error { case invalidInput case insufficientFunds(moneyNeeded: Int) case outOfStock } 연관값 각 하나의 타입에 대해 인스턴스마다 다른 값을 가지게 ..
1. Assert / guard 애플리케이션이 동작 도중에 생성하는 다양한 연산 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있습니다. 1.1 Assertion assert(_:_:file:line:) 함수를 사용합니다. assert 함수는 디버깅 모드에서만 동작합니다. 배포하는 애플리케이션에서는 제외됩니다. 예상했던 조건의 검증을 위하여 사용합니다. var someInt: Int = 0 // 검증 조건과 실패시 나타날 문구를 작성해 줍니다 // 검증 조건에 부합하므로 지나갑니다 // 검증 조건에 부합하지 않는 경우 메시지를 출력하고 멈춤 assert(someInt == 0, "someInt != 0") someInt = 1 //assert(someInt == 0) /..
1. 옵셔널 체이닝 옵셔널 체이닝은 옵셔널의 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하게 활용할 수 있습니다. 매번 nil 확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인할 수 있습니다. // 예제 클래스 // 사람 클래스 class Person { var name: String var job: String? var home: Apartment? init(name: String) { self.name = name } } // 사람이 사는 집 클래스 class Apartment { var buildingNumber: String var roomNumber: String var `guard`: Person? var owner: Person? init(dong: String, ho: ..
1. 클로저 클로저는 실행가능한 코드 블럭입니다. 함수와 다르게 이름정의는 필요하지는 않지만, 매개변수 전달과 반환 값이 존재 할 수 있다는 점이 동일합니다. 함수는 이름이 있는 클로저입니다. 일급객체로 전달인자, 변수, 상수 등에 저장 및 전달이 가능합니다. 1.1 클로저 문법 클로저는 중괄호 { }로 감싸져있습니다. 괄호를 이용해 파라미터를 정의합니다. (매개변수 필요 없으면 빈칸) -> 을 이용해 반환 타입을 명시합니다. (없으면 Void) "in" 키워드를 이용해 실행 코드와 분리합니다. { (매개변수 목록) -> 반환타입 in 실행 코드 } 1.2 클로저 사용 // sum이라는 상수에 클로저를 할당 let sum: (Int, Int) -> Int = { (a: Int, b: Int) in ret..
1. 구조체 struct 이름 { /* 구현부 */ } UpperCamelCase 사용 프로퍼티: 인스턴스 변수 (타입 안에 들어있는 변수) 인스턴스 프로퍼티: var, let 타입 프로퍼티: static , 타입에서 사용할 수 있는 프로퍼티 메소드: 구조체 안에 들어있는 함수 (타입 안에 들어있는 함수) 인스턴스 메서드: 인스턴스가 사용 타입 메서드: static, 타입 자체가 사용하는 메서드 struct Sample { // 가변 프로퍼티(값 변경 가능) var mutableProperty: Int = 100 // 불변 프로퍼티(값 변경 불가능) let immutableProperty: Int = 100 // 타입 프로퍼티(static 키워드 사용 : 타입 자체가 사용하는 프로퍼티) static va..
1. 함수 func 함수이름(매개변수이름1: 매개변수타입1, 매개변수이름2: 매개변수타입2...) -> 반환타입(없으면 Void, 생략 가능) { 함수 구현부 return 반환값 } 호출 방법 함수이름(매개변수이름1: 값,,,) 1) 매개변수 기본 값 지정 func greeting(friend: String, me: String = "yoahn"){ print("hello \(friend)! I'm \(me)") } 기본값을 가지는 매개변수는 호출 시 생략 가능 2) 전달인자 레이블 함수를 호출할 때 함수 사용자의 입장에서 매개변수의 역할을 좀 더 명확하게 표현하고자 할 때 사용합니다. 전달인자 레이블은 변경하여 동일한 이름의 함수를 중복으로 생성가능합니다.(함수 중복정의 가능) 함수 내부에서 전달인자를..