하루에 0.01%라도 성장하자
반응형

스위프트 12

iOS 오토레이아웃 ( AutoLayout )

안드로이드를 하면서 제일 고생했던 것은 레이아웃이다. 레이아웃의 개념을 잡는 것도 어렵긴 했는데... ( 디자인 센스가 1도 없어서.. ) 서로 다른 디바이스에서 같은 비율로 UI를 보여준다는 것 자체가 이해가 잘 안됬다... 가능한가 ??? 라는 생각이 먼저였다. 안드로이드를 하다보니 weight 개념을 알게되고 어느정도 비율이라는 것을 건드릴 때쯤 iOS에는 AutoLayout이라는 것이 있어서 layout을 자동(?)으로 잡아준다는 이야기를 들었다. 처음 안드로이드 앱을 만들때라서 ( 프로젝트 ) 레이아웃으로 피똥(?)싸고 있는데 ㅠㅠ iOS는 그리 쉬운 방법이 있었다니... AutoLayout 뷰의 제약 사항을 바탕으로 뷰 체계 내의 모든뷰의 크기와 위치를 동적으로 계산한다. 앱을 사용할 때 발생..

Develop/iOS 2019.05.14

iOS 음악 재생 앱 만들기 Part#2 - Audio Method

iOS 음악 재생 앱 만들기 Part#1 에서 사용된 메소드들을 조금 더 상세하게 확인한다. AVFoundation Apple 플랫폼에서 사운드 및 영상 미디어의 처리, 제어, 등 광범위한 기능을 제공하는 프레임워크 [ 주요기능 ] 미디어 재생 및 편집 카메라를 이용한 녹화와 녹음 시스템 사운드 제어 문자의 음성화 AVAudioPlayer Class 파일, 메모리에 있는 사운드 데이터를 재생하는 기능을 제공 [ 주요기능 ] 파일 또는 메모리에 있는 사운드 재생 ( 네트워크를 이용한 재생은 불가 ) 파일 재생 시간 길이 제한 없이 재생 가능 여러개 사운드 파일 동시 재생 가능 재생 속도 제어 및 스테레오 포지셔닝 Seek 기능 제공 현재 재생 데이터 얻기 가능 사운드 반복 재생 가능 [ 주요 프로퍼티 ] ..

Develop/iOS 2019.05.14

iOS 음악 재생 앱 만들기 Part#1 - 앱 개발

edwith에서 수강하던 강좌를 마쳤다. ( Swift 기초문법 ) 우선은 Swift문법은 100% 다 익히고 응용할 수 있는 단계는 아니지만, 그래도 예제 코드나 이후 진행되는 프로그래밍 관련해서 보고 알아 볼 수 있는 정도의 수준은 되었다. 이번 강좌도 edwith에서 수강한다. iOS프로그래밍 이라는 강좌이며 오리엔테이션과 총 5개의 프로젝트를 진행 하는 것 같다. 아무래도 어플을 만드는거다 보니, 기존 기초문법 강좌보다 디테일하게 설명하는 부분은 많지 않다. ( 사용메소드 하나하나 사용법과 그 정의를 확인해가면서 하면 강좌가 진행될 수 없을 것이다 ... ) 스위프트는 아니더라도 나름 개발 경력을 가지고 있기 때문에 흐름(?)상 어떤 느낌인지 알겠더라. ( 경력에 감사! ) 그래도 내 블로그를 봐..

Develop/iOS 2019.05.14

Swift 오류 처리 ( Error )

오류 처리 스위프트에서는 주로 Error 프로토콜을 이용한다. 열거형이다. 연관 값을 통해 오류에 관한 부가 정보를 제공 오류(Error) 예시 enum ExceptionError : Error{ case invalidInput; case outOfStore; } throws 오류가 발생할 여지가 있는 함수임을 표현 class VendingMachine { let itemPrice : Int = 100; var itemCount : Int = 5; var deposited : Int = 0; func receiveMoney( money:Int) throws{ guard money > 0 else{ throw VendingMachineError.invalidInput; } self.deposited += ..

Develop/iOS 2019.05.13

Swift 익스텐션

익스텐션(Extension) 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능 타입만 알고 있다면 그 타입의 기능을 확장할 수 있다. 익스텐션이 타입에 추가할 수 있는 기능 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메서드 / 인스턴스 메서드 이니셜라이저 서브스크립트 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 상속과 익스텐션의 차이 분류 상속 익스텐션 확장 수직 확장 수평 확장 사용 클래스 타입 클래스, 구조체, 프로토콜, 제네릭 등 모든 타임 재정의 가능 불가능 사용법 extension 확장할 타입 이름 { /* 기능 구현 */ } [ 사용 예 ] extension Int{ // 제너릭에 추가로 저장 파라미터와 메소드를 만들어 준다. (수평적) var ..

Develop/iOS 2019.05.13

Swift 프로토콜 (Protocol)

JAVA의 interface와 비슷한 역할인 Swift의 protocol 이다. 프로토콜 (protocol) 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항을 정의함 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted)해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 한다. 프로토콜의 정의 protocol 프로토콜명 { /* 정의부 */ } 프로토콜의 구현 프로토콜은 항상 var 키워드를 사용한다. protocol Viewer { //프로퍼티 요구 var viewer : String { get set }; var language : String { get }; //메소드 요구 f..

Develop/iOS 2019.05.10

Swift assert 와 guard

assert 디버깅 모드에서만 동작한다 배포하는 애플리케이션에서는 제외된다. 예상했던 조건의 검증을 위하여 사용된다. 사실 이부분이 맘에 든다. 여러 언어들은 검증을 위해 Log를 찍는데 이게 사실 코드를 더럽히는 주된 요인이다. assert를 이용해서 debug를 하면 보다 더 정확하고 안전한 앱이 개발 될 수 있을 것 같다. var num : Int = 1; assert(num == 1, "num != 1"); // num이 1이 맞을경우는 무시, 1이 아닐경우는 "num != 1" 출력 후 중지 assert은 디버그를 보다 쉽게 할 수 있도록 해준다. guard 잘못된 값의 전달 시 특정 실행구문을 빠르게 종료 디버깅 모드 외에 다른 조건에서도 동작된다. guard는 else와 return, bre..

Develop/iOS 2019.05.10

Swift nil병합 연산자

이번포스팅은 조금 간단하게 메모(?) 차원의 포스팅이다. ( 내용이 간단해서 ;; ) 옵셔널 체이닝을 배웠는데 옵셔널 체이닝을 통해 nil값이 나왔을때 처리해주는 연산자에 대한 내용이다 nil 병합 연산자 (??) //옵셔널 체이능을 이용하면 이렇게 넘어가면서 nil체크를 할 수 있다. //최종적으로 ho가 nil일 경우 ho에 101값을 넣어주라는 의미이다. person?.home?.dong?.ho ?? 101; ??는 nil 병합 연산자로 해당 값이 nil일 경우 넣어줄 값을 정해줄 수 있다.

Develop/iOS 2019.05.10

Swift 이니셜라이저와 디이니셜라이저 ( init and deinit )

인스턴스는 생성이 되면 언젠가 소멸된다. Swift는 init, deinit으로 생성과 소멸을 관리한다. 인스턴스 생성과 초기값. 인스턴스가 생성될 때 가지고 있는 저장 프로퍼티는 초기값을 가져야만 한다. //인스턴스가 생성될 때 저장 프로퍼티는 초기값을 가져야만 한다. class TempA { var name : String = "뚠님"; var age : Int = 10; var seconName : String = "비밀"; // var seconName : String; // 이렇게 초기값을 지정하지 않으면 에러 발생. } 그러나 초기값을 주지 않거나, 초기값을 다른 변수값으로 가져와야 하는 경우가 있는데 그때 사용하는 것이 init이다. init class TempB { var name : St..

Develop/iOS 2019.05.10

Swift 클래스의 상속

상속이라는 것은 클래스를 보다 더 강력하게 만들어준다. Swift에서는 클래스의 상속을 이렇게 사용한다! 클래스 속성 정의 역시 소스로 설명하겠다! class Person { String name : String = "이름"; //Override 불가 final func hello(){ print("Hello!"); } //Override 불가 static func typeMethod(){ print("타입메소드! - Static"); } // Override 가능! class func classMethod() { print("타입메소드! - class"); } // Override 불가 == static과 같은 의미 fianl class func classMethod2(){ print("타입메소드! -..

Develop/iOS 2019.05.10
반응형