목록전체 글 (393)
나의 발자취
접근제어자는 코드의 캡슐화를 구현하는 중요한 도구로, 다른 소스 파일이나 모듈에서 코드에 접근하는 것을 제한한다. *아예 접근제어자를 작성하지 않으면 internal이다. 접근제어자 종류 (가장 개방적 → 가장 제한적)open가장 개방적인 접근 수준다른 모듈에서 상속 및 오버라이드 가능클래스와 클래스 멤버에만 사용 가능프레임워크에서 주로 사용open class OpenClass { open func openMethod() { }} public모든 소스 파일에서 접근 가능다른 모듈에서 상속 및 오버라이드 불가프레임워크 API로 주로 사용public class PublicClass { public func publicMethod() { }} internal기본 접근제어자같은 모듈 내에서만 ..
onAppear와 onDisappear는 SwiftUI에서 뷰의 생명 주기를 관리하는 데 중요한 역할을 하며, 뷰가 화면에 나타나거나 사라질 때 특정 작업을 수행할 수 있도록 돕는다. struct SwiftUIView: View { @State var isShowing: Bool = false var body: some View { if isShowing { Text("SwiftUI Lifecycle").onAppear(perform: { print("On Appear") }).onDisappear(perform: {print("On Disappear") }) } Tog..
@State와 @Binding은 필요충족관계가 있다고 볼 수 있다. 이 둘은 SwiftUI에서 상태 관리를 위한 서로 다른 역할을 수행하지만, 함께 사용될 때 상위 뷰와 하위 뷰 간에 효과적으로 데이터를 공유하고 UI를 업데이트하는 데 기여한다. @State: 상태 정의, 관리상태 관리: @State는 뷰의 상태를 직접 관리한다. 상태가 변경되면 해당 뷰가 다시 렌더링된다. (뷰의 생명 주기와 밀접하게 연결)소유권: @State 변수를 소유하는 뷰에서만 수정할 수 있다.@Binding: 상태 참조(연결)상태 참조: @Binding은 상위 뷰의 @State 변수를 하위 뷰에 전달할 때 사용된다. 이를 통해 하위 뷰는 상위 뷰의 상태를 읽고 수정할 수 있다.상호작용: 하위 뷰에서 @Binding을 사용하면,..
일단 UIKit은 모두 클래스였는데 SwiftUI는 구조체기 때문에 처리속도가 굉장이 빠르다. 명령형 프로그래밍은 프로그램의 상태와 결과를 변경 및 달성하기 위하여 연산들의 순서적인 흐름을 명시적으로 작성하는 특징이 있지만, 선언형 프로그래밍은 무엇을 해야 하는지(결과)를 기술하고, 어떻게 수행할지는 시스템에 맡기는 방식이다. 프로그래머는 원하는 결과를 선언하며, 세부적인 수행 절차는 기술하지 않는다.결국 높은 수준의 추상화를 통해 코드를 이해하기 쉽다. (수행은 시스템이 알아서 해주기 때문에) 예를 들어, TextLabel의 텍스트 내용을 변경한다고 치면, 앞서 스토리보드를 통한 UIKit은 직접 속성을 업데이트하는 명령을 추가했었다. 그러나 SwiftUI에서는 상태 변수를 사용해서 자동으로 업데이트..
애플 지도와 MapKit를 활용해볼 것이다. 우선, MKMapView를 끌어다가 뷰에다가 놓아주고 아울렛 연결을 해준다. 그다음, 구글 맵에 가서 위도와 경도를 복사해오기 위해 내가 복사하고 싶은 위치에 마우스를 호버하고 위치 공유하기를 누르면 위도와 경도가 나타나게 된다. 미국 기반이기 때문에 미국의 위치는 아래와 같이 우클릭하면 경도와 위도가 같이 뜨고, 클릭하면 바로 복사가 된다. 그대로 lat, long에 복붙을 해놓는다.let center = CLLocationCoordinate2D(latitude: 37.463197, longitude: 126.905945) 그리고, 코드 후에 설명을 해보겠다.let center = CLLocationCoordinate2D(latitude: 37.463197..
왼쪽 버튼도 actNext() 기능에 연동시키고, 왼쪽 버튼은 tag값을 -1, 오른쪽은 +1로 주고 page += sender.tag로 주면 똑같이 동작을 한다! CoreLocation 라이브러리를 사용할것이다.아래와 같이 선언해준다. 클래스로 선언하면 힙영역에 있게 된다. 이렇게 선언을 하게 되면 viewDidLoad가 될 때 매번 옵셔널값으로 불러오게 된다.config 설정을 할 게 있을 때는 이와 같이 설정해주는 것이 좋다. 아래와 같이 코드 완성을 해준다. import UIKitimport CoreLocationclass ViewController: UIViewController { let manager = CLLocationManager() override func view..
Cocoapods: 가장 오래되고 많이 사용하는 패키지 매니저. 대부분의 라이브러리가 지원 -Carthage: 비교적 최근에 등장한 패키지 매니저로 코코아팟 다음으로 많이 사용됨 Cocoapods 설치 sudo gem install cocoapods초기화: 프로젝트 파일이 있는 폴더로 이동해서 pod init라이브러리 설정: podfile 수정라이브러리 설치: pod install alamofirejson 데이터를 비동기 방식으로 요청을 처리해 앱의 성능을 향상 kingfisher이미지를 쉽게 다운로드하고 캐시할 수 있도록 도와주는 swift 기반의 라이브러리네트워크에서 이미지를 다운로드하고 로컬에 캐시하여 성능을 향상비동기 방식으로 이미지를 로드해 앱의 반응성을 향상
에러알라모파이어를 설치하고 빌드를 실행하면 아래와 같이 에러가 나타나면서 되지 않는 경우가 있다.에러 메시지를 보니, AlamofireDynamic의 파일/위치를 찾을 수 없어서 발생하는 문제이다. 해결방법Project 클릭 > Build Phases > Link Binary With Libraries에 가면 현재 아래와 같이 세 개의 라이브러리가 Required Status로 되어있을 것이다. 문제가 되는 AlamofireDynamic을 제거해주고 아래와 같은 상태로 만들어준다. 다시 빌드를 실행한다.