목록앱 개발/iOS (96)
나의 발자취

@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 기반의 라이브러리네트워크에서 이미지를 다운로드하고 로컬에 캐시하여 성능을 향상비동기 방식으로 이미지를 로드해 앱의 반응성을 향상

Codable이란?• Swift4 에서 도입된 Protocol• public typealias Codable = Decodable & Encodable• Decodable 과 Encodable로 구성• Encodable은 Struct, Class, Enum 등의 인스턴스를 JSON 데이터로 변경시켜줌• Decodable은 JSON 데이터를 Struct, Class, Enum 등의 데이터로 변경시켜줌 Codable Encode일단 구조체의 프로토콜을 Codable로 설정한다.import UIKitstruct Person: Codable { let name: String let age: Int}let person = Person(name: "John", age: 20)let json = try?..

disclaimer: 방탄 팬 아니지만 제공받은 리소스가 이것 뿐으로, 저작권 때문에 모자이크함.unwind 세그 구현하기 리스트를 새로 추가하면 plist에 업데이트가 되면서, 뷰에도 나타날 것이다.문제는, 새로 추가하는 화면에서 뒤로 가기를 해야한다. 여기서 착각을 많이 하는 부분이 있는데,데이터 로드는 테이블뷰에서 하기 때문에 Unwind 관련 메서드는 테이블뷰가 있는 MainTableViewController에서 해주어야 한다.(viewWillAppear 는 하수.. 금지) MainTableViewController.swiftViewDidLoad 아래에 IBAction을 만들어준다. Main.storyboard exit에 마우스 우클릭을 해보면 방금 메인에서 만들었던 함수가 나온다. 라디오 ..

새롭게 Property List 파일을 생성한다. 클릭해서 보면, Root 는 Dictionary로 되어있다. 이걸 Array로 바꾼다. (왜냐하면 최종적으로 보여지는 데이터 포맷은 array여야 하므로) 하위 경로에 생성될 데이터는 한 인물에 대한 정보이므로, Dictionary type으로 바꿔준다. 상세 데이터를 정의해주고, Cmd+C/ V 를 해준다. 이렇게 뷰도 만들어준다. 코코아 터치클래스 만들고 연결해주기.데이터는 plist에 담겨있다. 이제 Bundle이라는 것을 만들게 되는데, 우리가 만드는 bts.plist, image 같은 것들을 하나로 모아서 zip 파일로 만든다. 그 이후 샌드박스에다가 복사를 해서 그것을 실행을 하게 된다.그럼 우리가 만든 plist는 번들 안에 담기게 되..