본문 바로가기

반응형

전체 글

(188)
IOS, Swift, Xcode를 배우기 시작하면서 swift와 Xcode를 배우고자 결심하게된 계기는 개발하고 싶은 애플리케이션이 생겼다. 그리고 현재 맥북에어 M1을 사용하면서 자연스럽게 환경도 구성이 되었다. 안드로이드 스튜디오를 활용한 안드로이드 애플리케이션 개발을 해보려고 계획했었으나 아무래도 졸업 후에 IOS 쪽 개발자가 더 평균 연봉이 높은 것 같다는 생각이 들어서 이왕 애플리케이션 개발 학습을 IOS 쪽으로 하는것이 더 좋을거란 생각도 포함된다. 또한 머신러닝 쪽 공부도 관심있게 하고 있었는데 머신러닝 공부를 하면서 배우는 과정을 접목시키면 좋을 것 같은 애플리케이션이 떠올랐다. 기획표를 만든 것은 조만간 업데이트 할 예정이지만 내가 개발하려고 하는 애플리케이션의 메인 기능은 영화 명장면을 사용자가 따라한 후 점수를 측정하는 것이다. 점수를..
swift - 고차함수 by yagom 전달인자로 함수를 전달받거나 함수실행의 결과를 함수로 반환하는 함수 map, filter, reduce map 컨테이너 내부의 기존 데이터를 변형(transform)하여 새로운 컨테이너 생성 let numbers: [Int] = 0,1,2,3,4] var doubledNumbers: [Int] var strings: [String] // for 구문 사용 doubledNumbers = [Int]() strings = [String]() for number in numbers { doubleNumbers.append(number*2) strings.append("\(number)") } print(doubledNumbers) // [0, 2, 4, 6, 8] print(strings) // ["0", "1..
swift - 오류처리 Error Handling by yagom Error 프로토콜과 (주로) 열거형을 통해서 오류를 표현한다. enum 오류종류이름: Error{ case 종류1 case 종류2 case 종류3 ... } // 자판기 동작 오류의 종류를 표현한 VendingMachineError 열거형 enum VendingMachineError: Error{ case invalidInput case insufficientFunds(moneyNeeded: Int) case outOfStock } // 함수에서 발생한 오류 던지기 // 자판기 동작 도중 발생한 오류 던지기 // 오류 발생의 여지가 있는 메서드는 throws를 사용하여 오류를 내포하는 함수임을 표시한다. class VendingMachine { let itemPrice: Int = 100 var ite..
swift - 익스텐션 extension by yagom 익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능이다. 기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입의 기능을 확장할 수도 있다. 익스텐션으로 추가할 수 있는 기능: 연산 타입 프로퍼티, 연산 인스턴스 프로퍼티, 타입 메서드, 인스턴스 메서드, 이니셜라이저, 서브스크립트, 중첩 타입, 특정 프로토콜을 준수할 수 있도록 기능 추가 기존에 존개하는 기능을 재정의 할 수는 없다. extension 확장할 타입 이름{ 타입에 추가될 새로운 기능 구현 } 익스텐션은 기존에 존재하는 타입이 추가적으로 다른 프로토콜을 채택할 수 있도록 확장할 수도 있다. extension 확장할 타입 이름: 프로토콜1, 프로토콜2, ..
swift - 프로토콜 by yagom v프로토콜은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 이니셜라이저 등의 요구사항을 정의한다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted)해서 프로토콜의 요구사항을 실제로 구현할 수 있다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 '프로토콜을 준수한다.(Conform)'고 표현한다. 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 기능을 모두 구현해야 한다. 쉽게 말하면 어떤 타입(구조체등)에 "넌 특정 기능이 꼭 필요하니 무조건 구현해라"라는 것 protocol 프로토콜 이름{ 정의 } protocol Talkable{ // 프로퍼티 요구 // 프로퍼티 요구는 항상 var 키워드를 사용한다. // get은 읽기만 가능해도 상관 없다는 뜻이며 // get과 set을 모두 ..
swift - assert와 guard by yagom 애플리케이션이 동작 도중에 생성하는 다양한 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있도록 도와주는 기능 assertion 조건들을 가지고 어떤 결과를 확인하는데 사용할 수 있다. assert(_:_:file:line:) 함수를 사용한다. assert 함수는 디버깅 모드에서만 동작한다. 배포하는 애플리케이션에서는 제외된다. 주로 디버깅 중 내가 예상했던 조건의 검증을 위해서 사용된다. var someInt: Int = 0 aseert(someInt == 0, "someInt != 0") // someInt가 0인 경우 출력되는 값 없이 지나가지만 거짓인 경우 문자열을 출력한 후 디버깅을 중지한다. someInt = 1 // assert(someInt == 0) //..
swift - 타입캐스팅 by yagom 스트프트의 타입캐스팅은 인스턴스의 타입을 확인하는 용도 또는 클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 확인하는 용도로 사용한다. is, as를 사용한다. /* let someInt: Int = 100 let someDouble: Double = Double(someInt) # C언어 및 다른 대부분의 언어에서 사용하는 방법 // 이 방법은 스위프트에서는 타입캐스팅이 아닌 Double타입의 인스턴스를 하나 더 생성하는 것이다. */ // 타입 캐스팅을 위한 클래스 정의 // 상속을 활용한 부모와 자식 클래스 class Person{ var name: String = "" func breath(){ print("숨을 쉽니다.") } } class Student: Person{ ..
swift - 옵셔널 체이닝과 nil 병합 연산자 by yagom 옵셔널 체이닝은 옵셔널 요소 내부의 프로퍼티로 또다시 옵셔널이 연속적으로 연결되는 경우 유용하게 사용할 수 있다. 구조체 안에 구조체 또 구조체 안에 구조체가 있을때 변수가 nil인지 아닌지를 확인해야 할 경우가 생긴다. class Person { var name: String var job: String? var home: Apartment? # 옵셔널(Obtional) init(name: String){ slef.name = name } } class Apartment{ var buildingNumber: String var roomNumber: String var 'guard': Person? var owner: Person? init(dong: String, ho: String){ building..

반응형