SwiftUI 에서 많이 사용되는 @State는 보통 내부에서 사용하기 떄문에 초기값을 할당하고 작업하는 경우가 많습니다. 하지만 외부에서 주입해서 사용할 경우 일반 문자열을 대입하면 에러가 발생합니다. 스위프트UI 에서 @State 값을 동적으로 할당하는 방법을 알아보겠습니다. 다음 코드를 작성해서 초기값을 설정하려면 다음과 같은 에러가 발생합니다. struct PasscodeView: View { @State private var passcode: String init(code: String) { self.passcode = code }}Error: Cannot assign value of type 'String' to type 'State' "String 문자열을 State 타입에 할당 ..
#Preview Xcode에서 CoreData, SwiftData를 Preview에서 보기 위해서는 @Query로 조회한 데이터를 사용할 수 없습니다. 이럴 때는 직접 데이터를 만들어서 테스트하는 방법이 있습니다. 우선 ModelConfiguration 객체를 인 메모리 only 행태로 생성합니다. 그리고 테스트 객체를 만들기 위해 ModelConfiguration 를 통해 ModelContainer를 만듭니다. 마지막으로 만들 때 사용할 모델을 추가해 줍니다. 그리고 이제 Preview에서 사용할 새로운 테스트 객체를 생성합니다. Container를 만들 config 객체는 isStoredInMemoryOnly를 true로 설정합니다. #Preview(traits: .sizeThatFitsLayout)..
Obsidian 이미지 링크 옵시디언을 사용하면 다른 노트앱에 비해서 이미지를 사용하는 빈도가 크지는 않습니다. 아무래도 이미지 내장 시 git에 저장할 내용이 많아지기 때문이죠. 마크다운으로 이미지를 추가하는 경우 다음과 같은 태그를 사용해서 이미지를 링크합니다. 로컬 이미지 ![[이미지 주소]] 웹 이미지  Obisidian 이미지 사이즈 조정 이미지 사이즈를 변경하려면 파이프( | ) 기호를 이용해 사이즈를 지정합니다. 보통 맥에서 스크린 샷을 찍어서 옵시디언에 넣으면 사이즈가 너무 커서 문제가 되는데 다음 태그를 이용해서 이미지를 줄일 수 있습니다. ![[이미지 주소|100]] 마찬가지로 웹 이미지의 경우 이미지 이름을 넣는 곳에 파이프 기호를 추가해줍니다. 과 환경(주변기기) 사이에 미리 연결된 입출력 통로 파일 디스크립터 유닉스에서는 모든 개체를 파일로 관리하며, 프로그램(프로세스)가 파일에 접근하기 위해서 특정 파일의 디스크립터를 이용해 파일에 접근합니다. 셀은 입력과 출력을 위한 세 가지 기본 파일 디스크립터 (File Descriptor - 이하 FD)를 모든 프로세스에 제공합니다. 입력(스트림), 출력(스트림) 줄여서 I/O라고 칭합니다. stdin (FD 0) - 키보드 입력 stdout (FD 1) - 화면 stderr (FD 2) - 오류 실제 /dev 디렉토리를 확인하면 다음과 같이 파일 디스크립터를 파일 형태로 가지고 있는 것을 볼 수 있습니다. 유닉스(Unix)는..
1. 특정 파일을 무시 # DB 접속 파일을 제외 mysql.php 2. 모든 세팅 파일을 무시 # 애스터리스크 (*) 기호를 사용하여 패턴을 정의할 수 있다. # 이런 문자를 셸 글로빙(globbing)이라고 합니다. *.ini 3. 제외하면 안되는 파일 설정 # 설정 파일은 제외하면 안 됨 !mysql.conf 4. .gitginore와 동일한 위치의 파일에 대한 설정 # 현재 디렉터리 안에 있는 파일 무시 /my.txt 5. /my/ 디렉터리 안의 모든 것을 무시 # /my/ 디렉터리 안의 모든 것을 무시 /my/ 6. 하위 디렉터리 패턴 파일 무시 # doc 디렉터리 아래의 모든 .txt 파일 무시 doc/**/*.txt
eventChangedNotification 최근에 스위프트 UI 프로젝트를 진행하고 있습니다. 또한 새롭게 나온 SwiftData 를 적용하면서 여러가지 문제를 해결해 가고 있던 중 CloudKit 동기화까지 진행하게 되었습니다. SwiftData 가 효율적이고 좋은 것은 맞는 것 같지만 너무 자료가 없고 사용자체가 너무 추상화 되어 있기 때문에 세세한 컨트롤이 좀 어렵다고 생각합니다. 물론 제가 그걸 몰라서 그렇긴 하겠지만요. 첫 번째 난관이 Cloud 킷의 로드 완료 이벤트를 알고 싶었는데 해결이 되서 블로그에 남깁니다. ▼ 우선 이벤트 수신을 위해서 @State 로 다음 변수를 선언합니다. eventChangedNotification 는 이벤트가 변경될 때 마다 수신하게 됩니다. @State pr..
~ tilde * asterisk, star ' apostrophe, qutation mark, quote ` backtick, grave accent - hyphen, dash " double qutation mark, double quoutes ! exclamation _ underscore , comma @ at + plus sign . dot # number sign, hash, sharp = equals sign / slash $ Dollar sign | vertical bar, pipe () round bracket, parentheses % percent \ backslash {} culry braket, brace ^ caret ; semicolon [] square bracket & am..
처음 스위프트 UI를 사용하면 죄다 Struct로 구성되는 것을 보고 조금 익숙하지 않을 수 있습니다. 그러나 계속 공부를 하다 보면 왜 그런지 알게 되는데 그 이유를 5가지로 정리해 보겠습니다. struct ContentView: View { @State private var count = 0 var body: some View { VStack { Text("Hello") } } } 1. Struct는 단순합니다. 일단 스트럭트는 클래스에 비해 가볍습니다. 그리고 구조자체가 단순합니다. 이는 값타입이기 때문에 복사도 쉽고 참조타입인 클래스보다 메모리에도 사용에도 유리합니다. 이는 성능에 영향을 주고 아무래도 스토리보드나 xib로 만들어진 커다란 객체 덩어리 보다 훨씬 가볍고 구조적으로 UI를 만들 수 ..
스위프트 UI를 하면서 느끼는 장단점이 많이 있지만 최대의 장점을 꼽으라면 아마도 프리뷰로 개발 화면을 실시간으로 확인할 수 있다는 점일 것 같습니다. 프로젝트가 점점 커질 수록 빌드해서 확인하는 시간이 늘어나기 마련인데 스위프트 UI로 아직까지 커다란 프로젝트를 진행해본적이 없어서 모르겠으나 화면 개발에 있어서 Preview는 정말 유용한 것은 사실입니다. 그런데 다른 컴퓨터 환경에서 코드를 받아 진행하려고 하면 프리뷰 크래시가 많이 일어나는 것을 확인할 수 있습니다. 코드에 문제로 크래쉬가 일어날 수도 있지만 때로는 원인을 알 수 없이 문제가 생기는 경우도 있습니다. 보통 뷰 모델을 사용해서 작업하면서 데이터를 프리뷰에 제대로 전달하지 않아서 발생하는 문제는 작업자의 문제이니 그 밖에 해결 방법을 알..
스위프트 UI 버튼 비 활성화 스위프트 UI 에서 버튼을 비 활성화는 disabled(_:) modifier를 사용해 변경할 수 있습니다. boolean 값을 가지며 true 일 경우 disabled 상태가 되며 반대인 false 일 때는 enabled 상태가 됩니다. (false 값이 기본값) 비 활성일 경우 버튼의 색상이 Gray 색으로 변경됩니다. var body: some View { VStack { Button("비 활성 버튼") { } .disabled(true) Button("활성 버튼") { } .disabled(false) } .font(.title) } 활용 예제 다음 예제에서는 두 개의 컨트롤이 있습니다. TextField 에 값이 비어 있다면 그 값을 참조하는 name을 바인딩 한 ..