분류 전체보기

    [Swift] available 키워드

    @available 타입, 속성, 메서드 앞에 사용 @available(iOS 10.0) // iOS 10.0 에서만 적용되는 클래스 class Myclass{} @available(iOS 11.0, *)// iOS 11.0 이상에서만 doSomething이란 함수가 있다고. func doSomething(){} 앱이 업데이트 되거나 하면 iOS버전에 따라서 적용이 되는 기능이 생길 수 있다. 이런 경우에 에러의 발생을 막기 위해 사용한다. #available 조건문( if / guard / while ) 문에서 사용 if #avilable(iOS 11.0, *){ //iOS ii.0이상에서는 여기 } else { // 이외에서는 여기 }

    [Swift] #selector(셀렉터)

    #selector 메서드 주소를 통해 메서드를 가리키기 위한 기술 물론 메서드 주소를 통해 메서드를 호출할 순 없다. 단순하게 메서드를 가리키는 것? 셀렉터는 속성에 접근이나 메서드를 호출하는게 아니다. 가리키기만 한다. 코드 영역의 메모리 주소를 가리켜서, (버튼이 눌렸을 때 해당 메서드를 실행시키기 위해) 연결시키는 기술 클래스와 Objective-C 프로토콜에 포함된 멤버에만 적용 가능하다. 구조체는 적용이 불가능하다. 내부적으로 Objective-C프레임워크를 사용하고 있다. @objc 특성을 추가해야지만 사용 가능하다. #selector( 메서드 ) 셀렉터 내부에 메서드를 명시하게되면 해당 메서드를 가리키게 되고 이를 변수에 할당하면 셀렉터 구조체가 생성된다. 소스코드를 통한 이해 class D..

    [Swift] #keyPath

    #keyPath와 #selector는 문법적인 내용이 아닌 Framework와 관련된 내용이다. objc부터 쓰이던 기술임에도 불고하고 여전히 쓰이던 내용이다. framework 내부적인 메커니즘에 여전히 objc를 떼어놓고 사용할 수 없는 몇 가지 기술들이 있기 때문에 여전히 쓰인다. 물론 버려져야함.. #keyPath person.name ⬇️ "person.name" or person["name"] 이런식으로 접근하면 안될까? 키경로(문자열처럼 쉽게 만들 수 있는 인스턴스)/ 문자열로 속성에 접근하는 것이 편하지 않을까? 라는 생각으로 시작된 문법?? 이런 문법이 필요한 예를 들어보자. class Restaurant{ var name: String var affiliate: Snack init(na..

    [Swift] 디버깅(테스트/검증)함수 assert, precondition

    디버깅(테스트/검증)함수 앱을 테스트 하면서, 런타임동안 발생할 수 있는 여러 버그의 가능성, 잘못된 코드의 검증등을 수행하도록 도와주는 함수 print(), dump() 일종의 디버깅 함수이다. 어떤 코드들이 입력되는지 콘솔창을 통해 확인/검증 할 수 있으므로. 디버깅 함수 assert() assertionFailure() precondition() preconditionFaulure() fatalError() assert() ➡️ 실제 앱을 출시시, 일부러 앱을 종료시켜야하는 상황은 아니지만, 디버그 모드에서 검증 예) 레이블에 20 % / 30% /... 100% 표시한다고 했을때, -10%라고 표시된다고 굳이 앱을 종료시켜야 하는가? precondition() ➡️ 실제 앱을 출시시에도 앱을 의도..

    [Swift] Never타입과 fatalError()

    Never 타입 제어권을 호출한 위치로 return하지 않는다. Never타입은 빈 열거형으로 선언되어있다. 빈 열거형이므로 인스턴스를 생성할 수 없다 ex) let day: Weekday = Weekday.monday // 인스턴스 생성 불가 let some = Never() // 생성 불가 ⭐️함수의 return의 의미⭐️ 함수의 결과로 만들어진 값을 리턴한다. 함수 내부로 전달된 CPU실행의 제어권을 함수를 호출한 부분으로 돌려준다. ❓일반적인 함수의 흐름 //코드위치 func addTwoNumbers(a: Int, b: Int) -> Int { //1 var c = a + b //2 return c //3 } //@main var num1 = 5 //4 var num2 = 3 //5 var num..

    [UIKit] UICollectionView

    UICollectionView 데이터 항목의 정렬된 컬렉션을 관리하고 커스텀한 레이아웃을 사용해 표시하는 객체 UITableVIew처럼 ScrollView를 상속받고있으며 다양한 레이아웃을 보여줄 때 사용 리스트 형태와 슬라이더 형태 모두 표현 가능하다. UICollectionView에 표시되는 모든 View는 UICollectionViewReuseableView의 인스턴스여야한다. UICollectionViewReuseableView는 컬렉션 뷰에서 사용중인 재사용 메커니즘을 지원한다. 매번 새 View를 만드는 대신에 이 View를 재사용해서 성능을 향상시키고 스크롤하는 동안에 성능적인 요소들이 향상되게된다. 이 부분은 tableview와 마찬가지이다. UICollectionView의 구성요소 Sup..

    [Swift] CaseIterable 프로토콜

    Enum 타입에서 사용할 수 있는 프로토콜이다 (Swift 5.2~) Iterable: 반복가능한 💥CaseIterable 채택시 아래의 타입 계산 속성이 자동으로 구현된다. static var allCases: Self.AllCases { get } 연관값이 있는경우 CaseIterable 프로토콜을 따르지 않아 구현할 수 없다.⭐️⭐️⭐️⭐️ ❗️원시값은 상관없음 구글링 해보면 방법이 있긴 하다고한다 😅 ❓allCases 타입 계산속성은 뭘 하는 놈일까? CaseIterable을 채택한 열거형의 모든 케이스를 가지고 있는 배열 CaseIterable 구현 예제 enum CompassDirection: CaseIterable { case north case south case east case west..

    [Swift] Comparable 프로토콜

    Equatable 프로토콜과 유사하다. 두 인스턴스에 대하여 아래의 연산자를 가능케한다. , = Comparable 프로토콜의 요구사항 static func Bool Equatable //클래스의 경우 ==는 무조건 구현해야함 static func == (lhs: Some, rhs: Some) -> Bool //다른 커스텀 타입의경우 모든 멤버가 Equatable을 따르다면 구현하지 않아도 됨 일반적으로 , = 연산자를 자동으로 구현해준다. Comparable 프로토콜은 Equatable프로토콜을 상속하고 있다. 그러므로 == 또한 구현해야한다. Int, Double, String 등은 Complable을 채택하고 있기 때문에 비교 연산이 가능하다 Com..

    [Swift] Equatable 프로토콜

    두 인스턴스를 비교하여 동일한지 확인할 수 있는 프로토콜이다. == , != 두 연산자는 같은지, 다른지를 확인할 수 있는 연산자다. Int와 Double형 등에서 ==와 !=를 사용해서 동일한지 동일하지 않은지 비교할 수 있었던 이유는 애플이 미리 Int와 Double에서 ==와 !=를 구현해 놨기 때문이다. 그렇기 때문에 동일성을 비교할 수 있었다. Equatable의 구현 요구사항 static func == (lhs: Self, rhs: Self) -> Bool Equatable의 구현 원칙⭐️ 1. 구조체, 열거형의 경우 Equatable프로토콜 채택시 모든 저장속성(열거형은 모든 연관값)이 Equatable프로토콜을 채택한 타입이라면 비교연산자(==, !=) 메서드 자동구현 2. 열거형의경우 연..

    [Swift] 메모리 안전성(Memory Safety)

    싱글 쓰레드 환경에서도 하나의 메모리에 동시적 접근이 발생 가능하다. 1. 메모리에 충돌하는 접근 이해 변수의 값을 설정하거나 함수에 인자를 전달하는 동작을 할 때 메모리에 접근하게 된다. var one = 1 // 쓰기 접근. print("We're number \(one)!") // 읽기 접근. 코드의 다른 부분이 같은 시간에 메모리의 같은 위치에 접근할 때 충돌이 발생할 수 있다. 메모리 접근의 특징 3가지 조건을 모두 만족하는 2개의 접근이 있다면 충돌이 발생한다. 적어도 하나는 쓰기 접근 (메모리 위치를 변경) 이거나 non-atomic (C atomic 연산이 아닌 것) 접근이다. 메모리의 같은 위치에 접근한다. 접근 시간이 겹친다. (순간적 / 장기적) 접근이 시작되고, 종료되기 전에 다른 ..