분류 전체보기 333

iOS swift guard구문

guard구문: if구문과 마찬가지로 주어진 표현식의 결과가 참인지 거짓인지에 따라 구문의 실행 여부를 결정짓는 방식의 조건문. if구문과의 차이점: guard구문에는 else블록이 필수이지만, 표현식의 결과가 참일 때 실행되는 블록이 없다. guard else { 주로 후속 코드들이 실행되기 전에 특정 조건을 만족하는지 확인하는 용도로 사용. 특정 조건을 만족하지 않은 채로 후속 코드를 실행하면 심각한 오류가 발생할 경우에, 전체구문을 "조기종료" 하기위한 목적으로 사용. 따라서 guard구문의 else 블록에는 이후의 코드 진행을 막아주는 구문이 반드시 포함되어야 한다. return 또는 break등. func divide(base:Int) { guard base !=0 else { print("연산..

iOS swift 문법편

꼼꼼한 재은씨의 swift 문법편 p118- -헤더 파일을 작성할 필요가 없다. -대소문자 구분 관례) 1)함수, 메소드, 인스턴스명의 첫글자는 소문자 2) 클래스, 구조체, 프로토콜 등 객체의 첫글자는 대문자 -구문 끝의 세미콜론 생략 가능 -엔트리 포인트(시작점)으로 사용되는 main()함수가 없다. 대신, @UIApplicationMain 어노테이션을 사용하여 앱을 시작하는 객체를 지정. 이 어노테이션이 붙은 객체는 단 하나뿐이어야 함. -문자열뿐만 아니라 문자도 큰따옴표 "" 사용 (문자열, 문자 모두) 문자를 저장하는 변수나 상수의 타입은 반드시 Character타입으로 명시해주어야함. 안그러면 타입추론기에 의해 문자열로 처리됨(string) -import 키워드를 사용하지만, 라이브러리와 프레..

iOS swift 웹 뷰 앱에서 웹 페이지를 여는 방법

웹 뷰 앱에서 웹 페이지를 여는 방법 ex) HTML기반의 웹 페이지 열기 1번의 경우- 앱에서 포커스가 벗어남. 나머지 3가지는 앱 벗어나지 않고 웹 페이지를 브라우징 해줌. 2번,3번 -> 웹 뷰 객체를 사용하여 웹 페이지를 보여준다는 점에서 비슷. 웹뷰란 ? 웹 페이지를 탐색하기 위해 사용하는 뷰 객체. 앱 안에 심을 수 있는 일종의 내장형 웹 브라우저. 주어진 URL에 해당하는 HTML데이터를 앱 화면에 출력하는 역할. 인앱 브라우저(In-App Browser) :인터넷 상의 웹 페이지를 읽어들이기 위해서는 디바이스가 반드시 네트워크에 연결되어 있어야 한다. 인앱 브라우저의 단점 : 기본적인 UI외에는 편의적 기능을 대부분 직접 구현해야 함. ex)앞으로가기, 뒤로가기, 북마크 이와 같은 경우, ..

iOS swift 일반 뷰 컨트롤러에서 테이블 뷰 사용

UITableViewDataSource: 테이블을 구성하기 위해 필요한 메소드 정의 tableView(_:numberOfRowsInSection:) tableView(_:cellForRowAt:) UITableViewDelegate: 테이블에서 발생하는 액션/이벤트와 관련된 메소드 정의 tableView(_:didSelectRowAt:) 일반 뷰 컨트롤러에서 테이블 뷰 사용 1)테이블 뷰 객체를 직접 추가 2)테이블 뷰 셀 객체를 직접 추가 3)클래스에 UITableViewDataSource, UITableViewDelegate프로토콜 선언 4)테이블 뷰와 뷰 컨트롤러 사이에 [dataSource], [delegate] 항목을 연결

iOS swift 재사용 매커니즘

재사용 매커니즘 iOS특유의 부드러운 화면을 위해 사용되는 몇 가지 매커니즘 중 하나. 1) 테이블 뷰가 화면에 나타낼 셀 객체를 자신의 데이터 소스에게 요청. (tabelView(_:cellForRowAt:) 사용) 2) 데이터 소스는 테이블 뷰의 재사용 큐에서 사용 가능한 셀이 있는지 확인하여 만일 있으면 그 중 하나를 꺼내서 전달하고, 없으면 새로운 셀 생성 3) tabelView(_:cellForRowAt:)메소드가 셀의 콘텐츠를 구성한 다음 반환하면 테이블 뷰는 이 셀을 받아 화면에 표시. 4) 사용자가 테이블뷰를 스크롤함에 따라 화면을 벗어난 셀은 테이블 뷰에서 제거되지만, 완전히 삭제하는 것이 아니라 재사용 큐에 추가됨 5) 사용자의 스크롤에 따라 1~4 과정을 반복. 웹상의 섬네일 이미지를..

iOS swift REST API로부터 데이터를 읽어오기

REST API로부터 데이터를 읽어오기 1.URL 객체 생성 let url = "http://swiftapi.rubypapaer.co.kr:2029/hoppin/movies?version=1&page=1&count=10&genreId=&order=releasedateasc" let apiURI: URL! = URL(string: url) 2.REST API를 호출하여 응답 데이터를 받아오기 let apidata = try! Data(contentsOf: apiURI) 3.받아온 데이터를 확인하고자 로그로 출력하기 (필수는 아님) SSL보안 프로토콜이 적용된 네트워크는 접속시 https://를 사용. 이를 적용하지 않은 일반 프로토콜은 http://를 사용. 보안 프로토콜이 적용되지 않은 서버에 임의로 h..

iOS swift 네트워크 통신의 종류

네트워크 통신이 이루어지는 2가지 방식 1) TCP / UDP 를 사용하는 소켓 방식의 연결성 통신 2) HTTP, HTTPS, SMTP등의 프로토콜을 이용한 비연결성 통신 [1. 소켓 방식의 연결 지향 통신] 소켓을 이용한 네트워크 통신 방식은 보통 저수준 (low level) 통신을 통하여 구현됨. 일단 앱과 서버가 연결되면 한쪽에서 명시적으로 끊을 때까지 지속해서 연결을 유지하는 방식 1) TCP 연결: 데이터 유실을 방지하고 완전한 전송을 보장하지만 상대적으로 덜 빠르다 2) UDT 연결: 데이터의 완전한 전송을 보장하지 않지만, 상대적으로 더 빠름. [2. 비연결 지향 통신] 대표적으로 HTTP/HTTPS 프로토콜. 웹 서비스에 주로 사용된다. 비연결성 프로토콜은 요청이 들어오면 이에 맞는 응답..

iOS swift 셀프 사이징 셀

테이블뷰에서 셀프 사이징 셀: 직접 높이에 신경 쓸 필요없이 콘텐츠에 따라 자동으로 높이가 조절되므로 편리해진다. estimatedRowHeight 프로퍼티 : 셀 전체의 높이를 결정하기 전에 임시로 사용할 셀의 높이 값. UITableView.automaticDimension 객체 : 테이블 뷰의 rowHeight 속성에 대입되어 높이 값이 동적으로 설정될 것을 테이블 뷰에 알려주는 역할. viewWillAppear(_:) 메소드와 같은 적절한 시점에 넣어서 구현해주면 됨. viewDidLoad()는 아직 뷰가 화면에 구현되기 전 시점이므로 적절하지 않음. 구현 >> override func viewWillAppear(_ animated: Bool) { self.tableView.estimatedRow..

iOS swift A ?? B

A ?? B 만약 A가 nil이 아닐 경우 옵셔널을 해제하고, nil일 경우 대신 B값을 사용하라. 이 연산자를 사용하면 옵셔널 타입이 해제된다. 이 연산자의 앞쪽에는 옵셔널 값이, 뒤쪽에는 일반 값이 위치한다. 이 연산자의 뒤쪽에 위치한 일반 값의 타입은 앞쪽 옵셔널 값에서 옵셔널을 해제한 타입과 일치해야 한다. A != nil ? A! : B if A != nil { return A! } else { return B } 응용>> let cell = tableView.dequeueReusableCell(withIdentifier: "cell") ?? UITableViewCell() "cell"아이디를 가진 셀을 읽어와 옵셔널을 해제하되, 만약 그 값이 nil일 경우 UITableViewCell 인스턴스..

iOS swift 테이블 뷰의 행 높이를 결정하는 방식

테이블 뷰의 행 높이를 결정하는 방식 코코아 터치 프레임워크에서 2가지 방식 제공 1) 모두 동일한 높이를 갖는 방식 2) 각 셀마다 다른 높이를 갖는 방식 +self-sizing방식(내부 콘텐츠에 따라 동적으로 셀의 높이가 늘어나거나 줄어드는 방식) tableView(_:estimatedHeightForRowAt:) 테이블 뷰에서 특정 행의 높이를 설정하고 싶을 때 사용하는 메소드. UITableViewDelegate 프로토콜에 정의되어 있다. UITableView클래스에서 이미 구현되어 있으므로 커스텀 클래스에서는 override키워드를 붙여 재정의하는 방식으로 사용해야 한다. 각각의 행 높이를 다르게 제어해줄 수 있다. self.tableView.rowHeight =