iOS 12

[Swift] 구조체(struct)와 클래스(class)의 차이 정리

구조체와 클래스의 정의 및 구문 Swift에서 구조체와 클래스 모두 사용하여 사용자 정의 데이터 유형을 정의할 수 있습니다. 구조체를 정의하는 구문은 다음과 같습니다: struct MyStruct { // properties and methods } 클래스를 정의하는 구문은 유사합니다: class MyClass { // properties and methods } Reference vs Value Type 구조체와 클래스의 가장 중요한 차이점 중 하나는 메모리 처리 방식입니다. 구조체는 값 유형이므로 구조체 인스턴스를 만들 때 복사됩니다. 이는 각 구조체 인스턴스가 데이터의 자체 복사본을 갖게 되어 한 인스턴스의 수정이 다른 인스턴스에 영향을 미치지 않는다는 것을 의미합니다. 반면에 클래스는 참조 유형입..

iOS/Swift 2023.03.01

WCSession / WCSessionDelegate 정리

WCSession은 WatchConnectivity 프레임워크에서 제공하는 클래스로, iOS 앱과 Apple Watch에서 실행되는 watchOS 앱 간의 통신을 가능하게 합니다. 이 클래스는 두 기기 간에 데이터를 주고받을 수 있는 메서드와 통신 세션의 상태를 관리하는 메서드를 제공합니다. WCSessionDelegate는 iOS 앱과 watchOS 앱 간의 통신 세션과 관련된 이벤트를 처리할 수 있는 메서드를 정의하는 프로토콜입니다. 이 프로토콜의 메서드는 WCSession 객체에 의해 호출되며, 세션이 활성화되거나 비활성화되거나, 메시지를 수신하는 등의 이벤트에 대응합니다. WCSession의 주요 메서드 activate() iOS 앱과 watchOS 앱 간의 세션을 활성화합니다. 데이터를 보내거나..

iOS/Swift 2023.02.28

UIScrollView / UIScrollViewDelegate 정리

UIScrollView UIScrollView는 iOS에서 화면의 표시 영역보다 큰 콘텐츠를 스크롤하여 볼 수 있게 해주는 뷰입니다. UIScrollView는 UIView의 하위 클래스이며, 수직 또는 수평으로 콘텐츠를 스크롤하고 콘텐츠를 확대하거나 축소하는 인터페이스를 제공합니다. UIScrollView의 중요 프로퍼티 contentOffset: 이 속성은 현재 보이는 콘텐츠의 위치를 스크롤 뷰의 원점에 상대적으로 지정합니다. 이것은 콘텐츠의 x와 y 오프셋을 나타내는 CGPoint 값입니다. 이 속성을 사용하여 콘텐츠를 프로그래밍 방식으로 스크롤하거나 동적 효과를 위해 다른 뷰에 바인딩할 수 있습니다. contentSize: 이 속성은 스크롤 뷰 내에서 스크롤 가능한 콘텐츠 영역의 크기를 지정합니다...

UICollectionView 섹션에 배경 색상을 적용하기

UICollectionView는 iOS 앱에서 데이터를 표시하는 데 자주 사용되는 컴포넌트 중 하나입니다. UICollectionView의 각 셀은 일반적으로 특정 데이터 항목을 나타내며, 해당 셀의 배경 색상을 지정할 수 있습니다. 그러나 UICollectionView의 섹션에 배경 색상을 적용하는 것은 조금 더 복잡합니다. 이번 글에서는 UICollectionView의 섹션에 직접 배경 색상을 적용하는 방법에 대해 알아보겠습니다. willDisplay(_:forItemAt:)에서 셀에 직접 backgroundColor 주입 UICollectionViewDelegate의 willDisplay(_:forItemAt:) 메서드를 사용하여 셀이 표시될 때마다 해당 셀의 배경 색상을 설정할 수 있습니다. 이 ..

iOS/Swift 2023.02.23

[Swift] Opaque Types 찍어먹기

doc: https://docs.swift.org/swift-book/LanguageGuide/OpaqueTypes.html Opaque Types Opaque Types을 사용한 fuction이나 method는 리턴되는 값의 타입에 대한 정보를 숨기는 타입으로 반환된다. 함수의 반환 타입으로 구체적인 타입을 제공하지 않고, 반환 값이 채택하는 프로토콜로 묘사된다. 프로토콜 타입을 반환하는 것과 다르게 Opaque Types은 타입 정보를 보존한다. => 컴파일러는 타입 정보에 접근할 수 있지만, 모듈의 클라이언트는 그렇지 않다. Opaque Type을 사용하지 않을 시 protocol Weapon { func attack() } struct NoTypeWeapon: Weapon { func attack..

iOS/Swift 2022.02.16

[UIKit] draw(_:) 개발문서 번역

Instance Method - draw(_:) 전달된 직사각형(rect) 내에 리시버들의 이미지를 그린다. Declaration func draw(_ rect: CGRect) Parameters rect 뷰들 bounds 중 업데이트가 필요한 부분 이다. 처음 뷰를 그릴 때 이 rect는 일반적으로 뷰의 전체 visible bounds 이다. 하지만, 이후 그리기 작업 중에는 , rect가 뷰의 일부만 지정될 수 있다. Discusstion 이 메서드의 기본 구현은 아무 동작도 없다. Core Graphics와 UIKit과 같은 기술을 사용하여 자신의 콘텐츠를 그리는 서브클래스는 이 메서드를 오버라이드 하고 해당 서브뷰의 draw 코드를 구현해야 한다. 너의 뷰(UIVIew의 서브클래스)가 다른 방법으..

[UIKit] UIResponder 개발문서 번역

UIResponder 이벤트에 응답하고 처리하기 위한 추상 인터페이스 Declaration class UIResponder : NSObject Overview 리스폰더* 객체(UIResponder의 객체)는 UIKit 앱의 이벤트 처리 뼈대를 구성한다. UIApplication 객체, UIViewController 객체 및 모든 UIView 객체(UIWinow 포함)를 비롯한 많은 주요 객체도 리스폰더 객체이다. 이벤트가 발생하면 UIKIT은 해당 이벤트를 앱의 responder 객체로 보내서 처리한다. *리스폰더 - 한국 말로 표현하자면 "응답자" 혹은 "응답 대상"이 가장 적절할 것 같다. 이벤트에는 터치 이벤트, 모션 이벤트, 원격 제어 이벤트 및 프레스 이벤트를 포함한 여러 종류의 이벤트가 있다...

[UIKit] cancelInteractiveMovement 개발문서 번역

cancelInteractiveMovement() 대화형(interactive) 이동 추적을 종료하고 아이템의 원래 포지션으로 되돌린다. -> 여기서 원래의 포지션은 마지막으로 이동을 완료한 좌표이기도 하다. Declaration func cancelInteractiveMovement() Discussion 아이템의 이동을 추적하는것을 취소(종료) 하고, 원래의 위치로 되돌리기 위해 이 메서드를 호출한다. 예를들어, gesture recognizer를 사용하여 상호 작용을 추적할 때, 제스처가 취소(종료)되는 시점에 이 메서드를 호출하면 된다. 해당 메서드를 호출하면, 컬렉션 뷰에서 추적하던 프로세스를 종료하고, 아이템을 원래 위치로 반환할 수 있다.

[UIKit] updateInteractiveMovementTargetPosition 개발문서 번역

updateInteractiveMovementTargetPosition(_:) 컬렉션 뷰의 범위 내에 있는 항목의 위치를 업데이트한다. Declaration func updateInteractiveMovementTargetPosition(_ targetPosition: CGPoint) Parameters targetPosition 컬렉션 뷰의 좌표계 안에서 아이템의 포지션 *"컬렉션 뷰의 좌표계 안" 이라는 키워드가 중요해 보인다. Discussion 아이템(컬렉션 뷰 셀)을 대화식(interactively)으로 이동할 때, 아이템의 새 포지션을 컬렉션 뷰에 제공하기 위해 이 메소드를 사용해야 한다. 아이템과 유저의 상호작용을 추적하기 위해 gesture recognizer를 사용할 때, 매번 이 메소드..

[UIKit] beginInteractiveMovementForItem 개발문서 번역

beginInteractiveMovementForItem(at:) 특정 indexPath에서 아이템의 상호 이동(interactive movement)을 시작하다. Declaration func beginInteractiveMovementForItem(at indexPath: IndexPath) -> Bool Parameters indexPath 이동할 아이템의 indexPath Return Value 아이템을 이동할 수 있으면 true, 아이템을 이동하는 것이 허락되지 않았다면 false Discussion 아이템(collection view cell)의 현재 위치에서 같은 콜렉션 뷰 내부의 새로운 위치로 상호 이동(interactvie movement)을 시작하기를 원한다면 이 메소드를 호출 해야한다..