Swift랑 친해지기/Swift문법정리 62

[Swift] convenience init (보조 이니셜라이저)

클래스를 생성할때 init을 통해서 반드시 모든 프로퍼티를 초기화한다. 이렇게 모든 프로퍼티를 초기화하는 init은 본래 Designated init이라고 한다. convenience init은 Designated init을 보조해주는 이니셜라이저이다. 예를 들어 밴드 멤버를 처음부터 구해서 결성한다하면 다음과 같이 모든 장르를 지정해주어 인스턴스를 생성할 수 있다. 하지만 기타와 드럼은 확정이고 보컬, 베이스 구한다고 가정한다면 다음과 같이 보조이니셜라이저를 이용할 수 있다. 보컬을 박박씨와 베이스를 이이씨로 구했다고 가정하면 다음과 같이 밴드가 결성되는 것이다. 밴드인원을 본래처럼 모두 구하고 싶으면 모두 초기화 해줄수도 있다.

async/await 로 비동기 처리 하기 (Swift)

비동기(Asynchronous)란 한 작업이 다른 작업의 완료를 기다리지 않고 독립적으로 실행되는 것을 의미합니다. 동기(Synchronous) 방식에서는 한 작업이 완료될 때까지 다음 작업이 실행되지 않지만, 비동기 방식에서는 한 작업이 시작되면 완료 여부와 관계없이 다음 작업을 실행할 수 있습니다. 비동기 작업은 대개 네트워크 요청, 파일 입출력, 데이터베이스 쿼리 등과 같이 시간이 오래 걸리는 작업에 사용됩니다. 이러한 작업은 완료까지 시간이 오래 걸릴 수 있으므로, 동기적으로 처리하면 전체 프로그램이 작업의 완료를 기다리는 동안 멈추게 됩니다. 하지만 비동기 방식을 사용하면 한 작업이 실행되는 동안 다른 작업을 수행할 수 있어 전체적인 성능과 응답성이 향상됩니다. 비동기 작업을 처리하는 방법은 여..

Cocoa Touch FrameWork,Foundation,UIKit,MVC 패턴, UIView, ViewController

Cocoa Touch FrameWork UIKit/Foundation/CoreData/MapKit/CoreAnimation 등을 포함하는 프레임워크 iOS개발 최상위 프레임워크 Foundation 기본적인 테이터타입, 자료구조, 네트워크 통신, 파일 관리 등 프로그램의 중심을 담당 UIKit 사용자 인터페이스 관리, 이벤트 처리 등 주로 기능을 구현해주는 프레임 워크 UIKit에는 Foundation 프레임워크를 포함하고 있음 UILabel, UIButton 등 앞에 대체로 UI가 붙은 클래스들이 대부분 MVC 패턴 Model 앱에 데이터 비즈니스로직을 가짐 View 사용자에게 데이터를 보여주는 UI를 담당 Controller Model과 View의 중간 역할 View로부터 사용자 전달받아 Model에게..

[Swift] 고차함수 (map,filter,reduce)

고차함수란? 다른 함수를 전달인자로 받거나 함수 실행 결과를 함수로 반환하는 함수 map 컨테이너 내부에 기존 데이터를 변형하여 새로운 컨테이너 생성 filter 컨테이너 내부에 있는 값을 걸러 새로운 컨테이너 추출 reduce 컨테이너 내부의 요소를 하나로 통합시켜줌 reduce(10) 초기값 10 각요소들을 하나로 통합시켜주는 것을 볼 수 있음 result는 누적값 element는 배열의 요소값 곱셈시

[Swift] try-catch (에러처리)

에러처리는 프로그램의 오류 조건에 응답하고 이를 복구하는 과정을 뜻함 스위프트에서는 발생(throwing), 감지(catching), 전파(propagating), 조작 (manipulating)을 지원함 Swift의 열거형은 관련 오류 조건 그룹을 모델링하는 데 적합해, 관련 값을 사용하여 오류 특성에 대한 추가 정보를 전달할 수 있음 열거형을 이용해 에러처리에 대해 알아봄 throw 명령문을 이용하여 오류를 발생시킬 수 있음 playground execution terminated: An error was thrown and was not caught 플레이그라운드 실행 종료:오류가 발생했지만 발견되지 않았다고 뜸 checkPhoneBatteryStatus라는 함수로 에러를 처리해보자 throws는 ..

[Swift] 열거형 (Enum)

열거형 enum - enumeration 연관성 있는 값을 모아 놓은 자료형 사용이유 공통된 주제에 대해서 정해 놓은 입력 값만 받고 싶을때 사용 stck영역에 저장되어 성능적으로 좋음 종류 원시값이 없는 열거형 Band라는 주제에 대한 관련성 있는 값들을 열거형으로 만들어봄 Band 열거형에 case를 나열해주면 원시값이 없는 열거형이 생성됨 또는 , 쉼표를 붙여 한번에 표현도 가능함 이렇게 열거형을 선언하면 자료형으로 선택할 수 있고 접근할 수 있게 됨 원시 값이 있는 열거형 원시값을 가지고 싶으면 Type이 꼭 명시되어 있어야함 다른 언어는 NumberType만 가능한데 갓 Swift 는 NumberType, Character, String 사용가능 다음과 같이 NumberType을 가지는 열거형을..

[Swift] extension (익스텐션)

기존의 클래스 ,구조체, 열거형, 프로토콜 등 타입에 새로운 기능(프로퍼티, 메서드,이니셜라이져 등)을 추가 원본타입에 접근하지 못하는 타입도 확장해서 사용 가능 예제 1 ) 구조체 Int 에서는 짝수와 홀수라는 기능을 제공하지 않음 원본 코드를 그대로 두고 내가 원하는 기능만 확장을 해봄 isEven과 isOdd 메서드를 사용할 수 있게 됨 예제2) extension 확장자를 이용하여 ConvertToInt라는 메서드 추가해 문자열 "숫자"를 Int형 숫자로 변경할 수 있도록 선언 우리가 보통 TableView, CollectionView 등에 delegate와 DataSource를 Extension해주는 것은 ViewController를 확장해주는 행위임 class ViewController: UIV..

[Swift] 프로토콜 (Protocol)

프로토콜은 특정 작업이나 기능에 적합한 메서드, 속성 및 기타 요구 사항의 청사진을 정의함 ⬇️ 해당 요구 사항의 실제 구현을 제공하기 위해 클래스, 구조체, 열겨형에 의해 채택 될 수 있음 프로토콜의 요구사항을 충족하면? 해당 프로토콜을 준수한다고 정의함 프로토콜 정의 방법 protocol SomeProtocol { 프로토콜 정의를 적으셈 } protocol SomeProtocol2 { 프로토콜 정의를 적으셈 } 구조체에서 프로토콜 채택방법 콜론(:)을 이용하여 이름 뒤에 프로토콜 이름을 배치하여 채택할 수 있음 쉼표(,)을 이용하여 여러개 나열 가능 struct SomeStructure: SomeProtocol, SomeProtocol2{ } 클래스에서 프로토콜 채택방법 슈퍼클래스를 상속하고 있는 경..

[Swift] assert(_:):file:line:)

assert메서드 특정 조건을 확인하고, 조건이 성립하지 않으면 메세지를 출력할 수 있는 함수 디버깅 중 조건의 검증의 위하여 사용하고 디버깅 모드에서만 동작함 condition - 조건확인 message - 메세지 출력 file - assert가 실패할 경우 인쇄할 파일 이름 line - asser가 실패할 경우 함께 인쇄할 줄 번호 입니다. assert의 첫번째 메서드 조건 - nickname assert의 두번째 메서드 메세지출력 - "개발자유망주가 아닙니다" nickname의 값을 긍정King으로 변경해주면 콘솔창에 fail message가 뜨며 메세지가 뜨는 것을 볼 수 있음 아래쪽에 기본값으로 호출되는 file과 line도 출력되는 것을 볼 수 있음

[Swift] 타입캐스팅 (is, as, as?, as!)

타입 캐스팅 인스턴스의 타입을 확인하거나 어떠한 클래스의 인스턴스를 해당 클래스 계층 구조의 슈퍼 클래스나 서브 클래스로 취급하는 방법 is 연산자 런타임 시점에 값의 타입을 확인하여 Bool타입으로 반환 import Foundation class Brand{ var name: String init(name: String){ self.name = name } } class Sports: Brand{ var founder: String //설립자 init(name: String, founder: String) { self.founder = founder super.init(name: name) } } class Music: Brand{ var artist: String init(name: String, a..