UIKit
-
SwiftUI에서 화면 캡쳐하기(with UIKit / UIGraphicsImageRenderer)Swift 2023. 10. 11. 14:23
SwiftUI에서 화면 캡쳐하기 최근에 하는 프로젝트에서 image를 만들어서 instagram으로 공유하는 기능을 구현해야 했다. 먼저는 화면의 이미지를 image로 렌더해야 하는 기능을 구현해야 해서 UIGraphicsImageRenderer를 활용한 캡쳐 기능을 구현하였다. 구현 순서 1. Target으로하는 View를 구현한다. 해당 뷰를 그대로 이미지로 만들기 때문에 따로 View를 만들거나 아래와 같이 바뀌는 내용이 없다면 extension에 computed property로 구현해도 된다. // 렌더해야 하는 뷰 extension RendererTestView { private var TargetImageView: some View { ZStack{ Color.white VStack { Te..
-
[Swift] Codable 개념 확실히 이해하기 💬Swift 2023. 10. 6. 21:36
Codable: type alias Codable is a type alias for the Encodable and Decodable protocols. When you use Codable as a type or a generic constraint, it matches any type that conforms to both protocols. Coadable은 Encodable과 Decodable을 합친 Union Type이다. 정의 typealias Codable = Decodable & Encodable Decodable: Protocol A type that can decode itself from an external representation. Decodable은 외부 표현을 자신으로 변환..
-
[Swift] 싱글톤(Singleton) 정리Swift 2023. 3. 6. 16:21
시작하며 UIKit으로 앱을 만드는 강의를 들으면서 class를 singleton으로 만들어서 작업하는 것을 배웠다. 대충 어떤 느낌인지는 알 것 같은데 왜 Singleton으로 사용하는지 Singleton이 무엇인지 다시 정리하려고 기록해두려 한다. Singleton 이란 싱글톤 패턴은 어떤 용도로 객체를 생성하는데 여러 인스턴스가 아닌 하나의 객체를 공용으로 사용하는 디자인 유형이다. 아래와 같이 코드가 있는 경우 각각의 컨트롤러에서 저장되는 정보들이 다른데 이 정보를 서로 보내줘서 하나의 정보를 만들 생각을 하니 벌써 피로해진다. 이럴 때 하나의 인스턴스만 만들어 둔 뒤 타입 변수로 두어 어디서든 공동된 객체에 접근하게 하면 이런 정보 전달에 대한 피로감을 줄일 수 있다. /* Singleton X..
-
[Swift] 메인쓰레드와 UI 작업 | UILabel.text must be used from main thread only에러처리 2023. 3. 2. 11:13
시작하며 Swift를 공부하면서 콘텐츠가 풍부한 유튜버마냥 하루에도 몇번이나 에러가 뜬다. 블로그에 쓸 내용이 마를 일은 없을 듯 하다. 간단한 Weather 앱을 만들기 위해 비동기로 Open Weather를 통해 데이터를 받아왔다. 받아온 데이터를 그대로 IBOutlet으로 연결된 label의 text에 담는 과정에서 위와 같은 에러가 발생했다. 즉, UI을 새로 그리는 과정에서 에러가 발생했다. import UIKit class ViewController: UIViewController { @IBOutlet weak var countryLabel: UILabel! @IBOutlet weak var regionLabel: UILabel! @IBOutlet weak var currentTempLabel..
-
[Swift] Exception NSException "keypath data not found in entity _"에러처리 2023. 2. 28. 11:18
문제 CoreData를 활용해서 데이터를 저장하는데 아래와 같은 에러가 발생하였다. Exception NSException * "keypath data not found in entity _" 해결 1. ViewController에서 주석을 달면서 체크한 결과 CoreData와 통신하는 싱글톤 클래스에서 문제가 발생한 것을 확인했다. 2. MemoData라는 entity의 속성의 date 속성이 있었는데 날짜에 따라 코어데이터에서 가져오는 코드에서 오타가 발생하였다. (date -> data) let dataOrder = NSSortDescriptor(key: "data", ascending: false) request.sortDescriptors = [dataOrder] 적용 코어 데이터에서 keypa..
-
[Swift] outlet connection error / 스토리보드 파일 연결 에러에러처리 2023. 2. 27. 22:45
문제 storyboard에서 아울렛으로 table view를 드래그해서 연결하려는데 해당 ViewController가 연결되지 않았다는 에러가 발생했다. 우측 Identity Inspector에서 연결된 클래스를 확인해도 정상적으로 연결되어 있었다. 해결 cmd + B로 리빌드 후 재시도 결과 정상적으로 연결되었다. 참고 https://developer.apple.com/forums/thread/76730 Can't connect outlets in IB | Apple Developer Forums I'm using a storyboard for a project I've been working on for sometime. A couple of days ago I added a new label to ..
-
[Swift] 메모리 참조 strong, weak, unowned 비교Swift 2023. 2. 9. 17:45
시작하며 기본적으로 iOS에서는 ARS(Automatic Reference Counting)을 통해 클래스의 인스턴스가 얼마나 많이 참조(retain)을 받고 있는지를 추적한다. 만약 어떤 인스턴스도 해당 객체를 참조하고 있지 않다면 자동으로 메모리에서 해제한다. 하지만 두개 이상의 인스턴스가 서로를 강하게 참조하고 있는 순환(cycle)이 발생한다면 어떤 인스턴스를 메모리에서 해제하려해도 다른 인스턴스가 참조하고 있는 상황이라 해제가 불가능하게 된다. 이를 위해 Swift에서는 strong, weak, unowned 세가지 방식으로 참조를 가능하게 하여 이러한 순환 참조가 일어나지 않게 방지할 수 있는 기능을 제공해주었다. Strong - 강한 참조 기본적으로 서로의 인스턴스끼리 참조가 이루어지면 강한..