ios
-
[Swift] \. 는 무엇인가 (KeyPath 정리)Swift 2023. 3. 23. 20:19
시작하며 SwiftUI tutorial을 보던 중 \. 라는 표현이 등장 했다. 처음 보는 표현이라 당황하였지만 언제는 친절한 스위프트 튜토리얼이었나 생각하며 구글링을 통해 정리해 보려 한다. KeyPath syntax: \BaseType.PropertyName Base타입은 타입 추론에 의해 추론할 수 있는 경우 생략해서 \.propertyName과 같이 사용한다. KeyPath는 값에 대한 참조가 아닌 프로퍼티에 대한 참조이다. 말 그대로 어떤 타입의값에 대한 path를 표현한다. 변수는 KeyPath와 달리 값에 대한 참조를 하기 때문에 변수를 사용하면 값에 전근할 수 있다. KeyPath의 표현식은 \ (백슬래시) 로 시작한다. 예시 struct Person { var name: String } ..
-
[SwiftUI] @State와 @ObservableObject 알아보기Swift 2023. 3. 21. 21:46
@State와 @ObservableObject SwiftUI Tutorial를 통해 SwiftUI를 공부하는데 이런 뜬금없는 친구들이 등장했다. 일단 쓰이는 곳에서 view가 새로 렌더된다는 느낌만 받고 넘어갔지만,, 결국 정리를 해야 다음 단계로 넘어갈 수 있을 것 같아 자세히 정리해보려 한다. @State @State는 SwiftUI의 뷰에서 사용되는 속성으로, @State가 붙어있는 속성이 변경 되는 경우 view가 자동으로 새로 그려지도록 하는데 사용된다. 다시 설명하자면 기존의 View에서 사용되는 변수들은 변경되어도 view가 다시 그려지지 않는 반면, @State가 붙은 변수( showDetail, showStar, 등)를 통해 view의 변화가 필요한 경우 사용할 수 있다. @State v..
-
[Swift] @escaping 키워드와 클로저Swift 2023. 3. 11. 15:10
시작하며 javascript라는 법이 없는 나라에서 온 나는 Swift의 @escape 키워드가 당황스럽고 또 놀랍다. @escape는 클로저를 인자로 전달받는 함수 내부에서 외부로 클로저를 전달하는 경우(비동기 등으로 클로저를 전달 받았을 때) 사용하는 키워드이다. 어떤 경우에 사용하는지 알아보자. escaping-closure and non-escaping-closure A closure is said to escape a function when the closure is passed as an argument to the function, but is called after the function returns. When you declare a function that takes a closur..
-
[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] Xcode .gitignore 파일 추가하기Swift 2023. 3. 1. 10:43
.gitignore api를 사용하는 간단한 앱을 만드려는데 api key를 github에 올리지 않기 위해 .gitignore 파일을 만들어야 했다. Xcode는 VSCode와 달리 터미널에서 .gitignore 파일을 추가할 수 있었다. git 시작하기 아래와 같이 git을 시작해서 .gitignore파일을 생성한다. // git 시작하기 git init // .gitignore 파일 생성 touch .gitignore // .gitignore 파일 열기 vim .gitignore gitignore 파일 작성하기 1. 아래의 사이트에서 Swift, Xcode 등을 입력해서 기본적으로 필요한 gitignore 파일을 얻을 수 있다. 2. 아래와 같이 내용을 전달 받은 뒤 복사를 한 뒤 앞서 열어둔 .g..
-
[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 - 강한 참조 기본적으로 서로의 인스턴스끼리 참조가 이루어지면 강한..