swift & iOS 63

[swift] init 메소드의 종류

이전 포스팅 '프로퍼티를 초기화 하는 3가지 방법' 중에 init 메소드를 작성하는 방법이 있었다. 여기서는 init 메소드의 종류에 대해 정리하려고 한다. 이번에도 역시 유튜브 이 영상을 참고했다. 1. designated initializer 클래스의 모든 프로터피를 초기화 하는 initializer이다. 클래스 내에 초기화 되지 않은 프로퍼티가 있다면 클래스 내에 최소 한 개 이상의 designated initializer를 작성하여 프로퍼티를 초기화 해주어야 한다. 그리고 초기화가 끝나지 전에 다른 메소드를 호출할 수 없다. 다른 메소드 중에 프로퍼티에 접근하는 메소드가 있으면 어떡해,,, 2. convenience initializer 일부 프로퍼티만 초기화 하기 때문에 self.init() 처..

swift & iOS/swift 2022.02.03

[swift] 프로퍼티 초기화 하는 방법 3가지

1. 프로퍼티에 초기값을 할당한다 class Person { var name: String = "person" } 특히 클래스는 프로퍼티에 초기값이 없으면 아래와 같은 경고 메시지가 나온다. 구조체는 init 메소드가 있는것처럼 자동으로 초기화를 해주기 때문에 저렇게 놔둬도 아무런 메시지가 뜨지 않는다. 2. 프로퍼티를 옵셔널 타입으로 둔다 옵셔널 타입으로 두면 기본값이 nil로 셋팅되어서 어쨌든 프로퍼티에 뭐라도 할당되어 있게 된다. class Person { var name: String? } 3. init 메소드 내에 프로퍼티를 초기화하는 코드를 작성한다. 프로퍼티에 초기값도 할당되어 있지 않고 옵셔널 타입도 아니라면 init 메소드를 작성하여 프로퍼티를 초기화 해야 한다. class Person ..

swift & iOS/swift 2022.02.03

[swift] delegate 패턴 (feat. 프로토콜) & 구현해보기

Delegate 패턴 delegate 패턴은 mvc, mvvm... 처럼 디자인 패턴의 한 종류라고 한다. 하나의 객체가 모든 일을 다 처리하기 보다는 처리할 것 일부를 다른 객체에 넘기는 것이다. 스위프트에서는 delegate 디자인 패턴으로 작성할 때 보통 프로토콜을 많이 활용한다고 한다. '디자인 패턴'에 대한 정의는 a proven solution to a common problem 인데, 그럼 어떤 problem이 있었길래 delegate 디자인 패턴이 생긴 것일까? 예를 들어, UITextField 라는 클래스가 있다. UITextField를 참조하게 될 많은 클래스들이 텍스트 필드에 어떤 이벤트가 발생하면 UITextField로 부터 알림을 받고 싶을 것이다. 하지만 UITextField가 ..

swift & iOS/swift 2022.02.01

[swift] 프로토콜 protocol

프로토콜이 좀 생소해서 항상 챙겨보고 있는 아래 유튜브 영상을 많이 참고했다. 아 물론 swift 공식문서도... https://www.youtube.com/watch?v=p19mUgg1CFQ&list=PLJqaIeuL7nuFbWKMhG8-xLzF1T7gIPr8Z&index=69 프로토콜? 프로토콜은 특정 클래스와 관련 없는 하나의 기능이나 임무를 수행하는데 필요한 프로퍼티와 메소드 선언부를 모아놓은 것이다. 프로토콜에 선언된 메소드에 대한 구현은 이 프로토콜을 채택(adopt)한 클래스, 구조체, 열거형에서 구현해야 한다 (conform: 준수하다). 그리고 프로토콜도 다른 클래스나 구조체, enum처럼 타입의 한 종류이다. 2022.02.19 보충: protocals are a way to expre..

swift & iOS/swift 2022.01.31

[ios 개발] UITextFieldDelegate의 유용한 메소드 3가지

UITextField 를 사용하게 되면 ios 키보드도 사용하게 되는데 키보드를 해제하고 싶거나 키보드의 return 버튼을 눌렀을 때 무언가를 하고 싶을때 UITextFieldDelegate 에 선언되어 있는 메소드들 중에 가져다 사용하면 된다. 이 때 해당 뷰 컨트롤러가 UITextFieldDelegate를 채택해야 하고, 뷰 컨트롤러에서 사용하는 UITextField 인스턴스의 delegate에 이 뷰 컨트롤러를 등록해줘야 아래 소개하는 메소드들이 작동한다. class WeatherViewController: UIViewController, UITextFieldDelegate { // UITextFieldDelegate를 채택 @IBOutlet weak var searchTextField: UITe..

[ios 개발] 키보드 사라지게 하기

아주 간단하다 텍스트 필드 인스턴스에다가 endEditing 메소드를 호출하면 된다. import UIKit class WeatherViewController: UIViewController { @IBOutlet weak var searchTextField: UITextField! @IBAction func searchPressed(_ sender: UIButton) { searchTextField.endEditing(true) } } 키보드의 return 버튼을 눌렀을때 사라지게 하고 싶으면 1. 해당 뷰 컨트롤러 클래스에서 UITextFieldDelegate 채택 2. viewDidLoad 에서 searchTextField.delegate = self 3. UITextFieldDelegate 프로토콜..

[swift] 제네릭 generic <>

제네릭은 스위프트에만 있는 것은 아니다. c, c#, java 등 프로그래밍 언어 전반적으로 있는 기능이다. (타입스크립트에도 있음) 제네릭은 타입을 나중에 결정하도록 해준다. 나중에 언제 결정하냐면 인스턴스가 만들어질 때 parameter로 전달되는 타입으로 결졍된다. 그렇기 때문에 같은 알고리즘을 다양한 데이터 타입에 적용하려고 할 때 제네릭을 사용하면 좋다. 왜냐면 알고리즘의 내용은 똑같은데 Int 타입으로 하나, String 타입으로 하나, Double 타입으로 하나 이렇게 만드느니 제네릭을 사용하여 해당 알고리즘을 사용하려고 할 때 타입을 정하면 알고리즘을 타입 별로 여러 개 만들 필요없이 하나만 있어도 되기 때문이다. https://developer.apple.com/documentation/..

swift & iOS/swift 2022.01.28

[swift] error handling - throws 메소드 & do ... catch 문

아래 사용한 예제들은 모두 swift 공식문서 예제를 그대로 가져오거나 약간 활용한 것이다. 출처: https://docs.swift.org/swift-book/LanguageGuide/ErrorHandling.html Error Handling — The Swift Programming Language (Swift 5.6) Error Handling Error handling is the process of responding to and recovering from error conditions in your program. Swift provides first-class support for throwing, catching, propagating, and manipulating recoverabl..

swift & iOS/swift 2022.01.28

[swift] 옵셔널 체이닝 optional chaining

옵셔널 체이닝은 옵셔널 타입의 프로퍼티, 메소드를 호출하는 과정(a process)이다. 중간에 nil이 한번이라도 발생하면 결과는 무조건 nil이다. 프로퍼티나 메소드 리턴값이 nil이어도 런타임 에러 같은 crash가 발생하지 않는다. 옵셔널 체이닝으로 받는 값은 nil아니면 옵셔널 타입이다. // 출처: https://docs.swift.org/swift-book/LanguageGuide/OptionalChaining.html#ID246 class Person { var residence: Residence? } class Residence { var numberOfRooms = 1 } let john = Person() let roomCount = john.residence!.numberOfRoo..

swift & iOS/swift 2022.01.28

[swift] 열거형 (enum with associated value)과 옵셔널 optional

출처: https://developer.apple.com/documentation/swift/optional Apple Developer Documentation developer.apple.com enum을 정해진 case 대로 쓸 때도 있지만 그 때 그 때 변하는 case를 가지는 enum도 있다. '관련값(associated)을 가지는 enum'이라고들 부르는 것 같다. 사실 Optional도 '관련 값을 가지는 enum'이다. 그래서 Optional 이라는 enum의 definition을 보면 아래처럼 associated value 를 가지는 enum이라는 것을 알 수 있다. case 밑에 init이랑 다른 메소드들도 있다. @frozen public enum Optional : Expressib..

swift & iOS/swift 2022.01.27