전체 글
-
리턴형이 never 타입인 함수Swift/swift 문법 2023. 4. 16. 20:07
실행 후에 원래 실행되던 곳으로 돌아가지 않겠다. nonreturning 함수 : 제어권을 전달하지 않음 사용 예시 디버그 모드 -> 출시 전 어떻게 해서든 오류를 발생하는 것이 목적 func someError() { fatalError("앱 해킹시도 흔적 발견") } 디버깅 함수 assert() precondition() fatalError() assert() 함수 출시 모드에서는 자동으로 제거가 된다. : 실제 앱 출시 시 일부러 앱을 종료시켜야 하는 정도의 상황은 아니지만, 디버그모드에서는 검증 가능. - assert(someWrongInput > 0, "유저가 값을 잘못 입력") - assertionFailure("유저가 값을 잘못 입력") -> 조건에 관계 없이 반드시 에러를 출력함. preco..
-
강한참조 사이클 - weak vs unownedSwift/swift 문법 2023. 4. 11. 17:59
[객체 간의 강한참조 사이클 예방법] weak 과 unowned의 공통점 : 가르키는 인스턴스의 RC의 숫자를 올라가지 않게 한다. 차이점 weak : 소유자에 비해 보다 짧은 생명주기를 가진 인스턴스를 참조할 때 주로 사용 -> nil 자동 할당 O (가리키는 객체가 사라졌을 시) unowned: 소유자보다 인스턴스의 생명주기가 더 길거나 같은 경우에 사용 -> nil 자동 할당 X, error 발생 [클로저에서의 강한참조 사이클 예방법] 캡처리스트 안에서 weak or unowned 사용
-
hashable 프로토콜Swift/swift 문법 2023. 4. 9. 22:55
- 고정된 길이의 숫자이면서 유일한 값으로 출력 Hashable의 의미 : 해당 타입을 해시함수의 input값으로 사용가능하다. swift에서는 String,Int,double 등의 기본 타입이 hashable 하다. -> hashable프로토콜 채택으로 값의 유일성을 보장할 수 있도록 만든다. hashable프로토콜의 요구사항 func hash(into hasher: inout Hasher) 구조체: hashable프로토콜만 채택하고 상세 구현은 선택 클래스: hashable 채택 후 요구사항 구현 필수
-
프로토콜 - Equatable, ComparableSwift/swift 문법 2023. 4. 3. 01:11
Equatable : '==' 오퍼레이터 오버로드가 필요 Comparable : 채택 시 비교 연산자 사용 가능 > , = ... Int Double String 에서는 채택 안해도 됨 미리 만들어 놓은 메서드 사용 -> Enum, struct, class에서 사용. 1.열거형에서 comparable 사용시 원칙: Comparable을 채택한 경우라도, *less then 연산자를 직접 구현해야 한다. Comparable 프로토콜 생성시 필수적으로 구현해야하는 매서드는? 1) == 2) >= 3) 드래그하시면 답을 볼 수 있습니다. 정답) 3 해설) less then 이외의 것은 같다 아니면 크다가 되므로..! Comparable 프로토콜은 Equatable 프로토콜을 상속받는다. -> 상위의..
-
Delegate 패턴iOS 앱 2023. 3. 31. 19:24
Delegate 패턴은 왜 사용하는가? : Delegate(대리자), 직접 행동하는 것이 아닌, 해야 할 행동을 위임한다. 1. 두 객체의 소통을 위한 delegate pattern 두 객체를 연결해 주고 싶을 때 사용 -> 이벤트를 받은 객체와 이를 처리할 객체가 다른 경우에 사용한다. 2. UI요소에서의 delegate pattern 인스턴스가 직접적으로 행위를 실행하기 어려운 경우에 사용한다. UI요소의 경우에는 직접 내부 코드를 수정할 수 없는 경우에 사용한다. UITableview의 내부 코드는 숨겨져있다. 따라서, delegate를 지정하고, 이 delegate에서 할 행동을 선언해주어야한다. Delegate 패턴 예시 protocol Remotecontrol{ func chanelUp() }..
-
화면전환 - 스토리보드 이용Swift/UIKit 2023. 3. 29. 23:52
화면을 전환하는 방법 중 스토리보드를 이용해서 전환하는 방법 1) 스토리보드 파일명 지정 (띄울 스토리보드의 파일명) 2) 스토리보드에서 가져온 데이터를 통해 뷰 컨트롤러 만들기 3) 뷰 컨트롤러 띄우기 [코드 예시] 1) 스토리보드 파일명 지정 (띄울 스토리보드의 파일명) let sb = UIStoryboard(name: "InfoVIewController", bundle: nil) 2) 스토리보드에서 가져온 데이터를 통해 뷰 컨트롤러 만들기 3) 뷰 컨트롤러 띄우기 //2) withIdentifier -> CollectionViewController의 storyBoard의 StoryboardId if let infoMealVC = sb.instantiateViewController(withIdenti..
-
확장에서의 생성자 사용Swift/swift 문법 2023. 3. 29. 00:22
클래스 - 편의생성자만 구현 가능하다. (self.키워드로 생성자 지정) 델리게이트 어크로스 : 편의생성자는 궁극적으로 지정생성자를 호출해야한다 // 참고 : 상속에서의 생성자 위임 규칙 1) 델리게이트 업 : 지정생성자는 슈퍼클래스의 지정생성자를 반드시 호출해야한다 2) 델리게이트 어크로스 : 편의생성자는 궁극적으로 지정생성자호출해야한다 구조체 - 지정생성자 형태로도 구현 가능하다.(자유) import Foundation class Aclass { var x: Int var y: Int init(x: Int, y: Int) { self.x = x self.y = y } convenience init() { self.init(x: 0, y: 0) } } class Bclass: Aclass { var z..