일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
31 |
- appsheet
- Looker
- 구글스프레드시트
- Java
- 엑셀
- 노코드
- 휴가관리
- 샤딩
- 어플만들기
- app
- lookML
- 앱만들기
- 데이터
- 데이터분석
- Ai
- openAI
- 파이썬
- 앱시트
- 노코드앱
- 인공지능
- 자바
- data
- 데이터저장
- Python
- 데이터시각화
- 데이터모델링
- nocode
- 자동화
- 어플
- Today
- Total
목록2021/10 (12)
공부한 것 꼭꼭 씹어먹기
스위프트에서 오류를 처리하는 방법 함수에서 발생한 오류를 해당 함수를 호출한 코드에 전파하는 방법 : throws do-catch 구문을 이용하는 방법 옵셔널 값으로 오류를 처리하는 방법 : try? 오류가 발생하지 않을 것이라고 확신하는 방법 : try! // 에러를 열거형으로 정의 enum PhoneError: Error { case unknown case batteryLow(batteryLevel: Int) } // 에러가 발생할 것 같은 지점에 아래 에러를 던저주자 throw PhoneError.batteryLow(batteryLevel: 20) // 1. 함수에서 발생한 오류를 해당 함수를 호출한 코드에 전파하는 방법 func checkPhoneBatteryStatus(batteryLavel: ..
옵셔널 체이닝 : 옵셔널에 속해 있는 nil일지도 모르는 프로퍼티, 메서드, 서브스크립션 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정 struct Developer { let name: String } struct Company { let name: String var developer: Developer? } var developer = Developer(name: "han") var company = Company(name: "Gunter", developer: developer) print(company.developer) // Optional에 감싸인 developer 객체 출력됨 print(company.developer.name) // 에러 // company.developer는 옵..
익스텐션 : 기존의 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가할 수 있다.(연산 프로퍼티는 추가 가능. 저장프로퍼티는 추가 불가능. 새로운 기능 추가는 가능하지만 기존 기능을 오버라이드 하지는 못함) extension Int { // Int타입에 isEven, isOdd라는 연산프로퍼티를 추가함 -> 기능의 확장 var isEven: Bool { return self % 2 == 0 } var isOdd: Bool { return self % 2 == 1 } } var number = 3 number.isOdd // true number.isEven // false extension String { // String타입에 convertToInt라는 메서드를 추가함 -> 기능의 확장 func..
프로토콜 : 특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의하고 자신을 채택한 구조체, 클래스, 열거형에게 정의된 요구사항을 준수하라고 요청함 (🐣 프로토콜은 자바의 interface같은 것인가??) protocol SomeProtocol { } protocol SomeProtocol2 { } // SomeStructure 구조체는 someProtocol, someProtocol2를 채택함 struct SomeStructure: SomeProtocol, SomeProtocol2 { } // 클래스는 상속받는 부모클래스가 있을 경우 가장 앞에 써줘야 함 class SomeClass: SomeSuperClass, SomeProtocol, SomeProtocol2 {} protoc..
assert 특정 조건을 체크하고, 조건이 성립되지 않으면 메세지를 출력하게 할 수 있는 함수 assert함수는 디버깅 모드에서만 동작하고 주로 디버깅 중 조건의 검증을 위하여 사용 var value = 0 assert(value == 0) // 통과 value = 2 assert(value == 0, "값이 0이 아닙니다") // Assertion failed: 값이 0이 아닙니다 출력(에러도 발생) guard문 뭔가를 검사하여 그 다음에 오는 코드를 실행할지 말지 결정하는 것 guard문에 주어진 조건문이 거짓일때 구문이 실행됨 주로 잘못된 값이 함수에 들어오는 것을 방어함(early return) func guardTest(value: Int) { guard value == 0 else { retu..
// 인스턴스의 타입 확인하기 : is // 기생충이 Movie 타입이거나 Movie의 서브클래스이면 true, 그 외에는 false class Movie {} var 기생충 = Movie() 기생충 is Movie // 기생충은 Movie 클래스 타입이다 == true let char: Character = "A" char is Character // ture char is String // false // 다운캐스팅 : as?, as!(이건 확신있을때만)
// 프로퍼티 오버라이드 // 프로퍼티 재정의 : 프로퍼티 자체가 아닌 프로퍼티의 getter/setter/opserver를 재정의 class Vehicle { var currentSpeed = 0.0 var description: String { return "traveling at \(currentSpeed) miles per hour" } } class Car: Vehicle { var gear = 1 override var currentSpeed: Double { // 상속받은 프로퍼티에 옵저버를 붙여보았다 didSet { gear = Int(currentSpeed / 10) + 1 } } override var description: String { // 상속받은 프로퍼티에 setter를 변경해..
저장 프로퍼티 : 인스턴스의 프로퍼티에 값을 저장하는 것 struct Dog() { var name: String let gender: String } var dog = Dog(name: "gunter", gender: "male") dog.name = "Eun" dog.gender = "female" // ❌ 상수라서 값 재할당 불가 let dog2 = Dog(name: "gunter", gender: "male") dog2.name = "Eun" // ❌ name은 var지만 dog2를 let으로 선언했기때문에 내부 프로퍼티도 다 변경불가함 class Cat() { var name: String let gender: String init(name: String, gender: String) { sel..