최근 운동 서비스 앱을 SwiftUI 로 작업하다가 뷰에 그림자를 만들었습니다.이런 UI를 그리고 싶었거든요... 그런데 이런 보라색 오류가 보였습니다.오류를 눌러봐도 어디에 오류가 있는건지 제대로 보여주진 않았습니다.직역해보니음.. 렌더링 비용이 많이 드는 동적 그림자를 사용하고 있다네요. shadowPath를 설정하거나 그림자를 이미지로 만들어서 사용하라고 권해주는데,저는 그림자를 하나하나 이미지로 만드는 비효율적인 행동을 하고싶지는 않으니shadowPath 를 더 알아보기로 결정했습니다. 이번 글에서는 SwiftUI에서 그림자를 최적화하여 적용하는 방법에 대해 알아보겠습니다.특히 shadow와 overlay를 사용하는 방법을 비교하고, 최적화된 그림자 적용 방법에 대해 설명하겠습니다.기존 코드: ..
학원 과제로 plist 파일로 저장한 BTS 멤버의 목록을 TableView 에 불러오고 멤버를 추가하는 기능을 완성하고있다. storyboard 기반 개발을 많이 안해봐서 이왕 연습하는거 잔뜩해보자! 하는 마음으로 하고있는데 문득 performSegue 메서드의 sender 가 Any? 타입인데 왜 nil 을 보내면 안되는지 궁금해졌다. 만능 GPT4.0 선생님께 즉시 질문 🤖 performSegue(withIdentifier:sender:) 메서드에서 sender 파라미터는 세그웨이를 트리거하는 객체를 참조합니다. 이 파라미터는 세그웨이가 시작된 위치를 식별하는 데 사용되며, 주로 어떤 UI 요소(예: 버튼, 셀 등)가 세그웨이를 트리거했는지를 알려주는 데 사용됩니다. 이 정보는 prepare(for..
UITableViewCell 을 만들때 이미 만들어진 셀이 없는 경우 아래의 코드를 이용해서 cell을 만들 수 있다. UITableViewCell(style: .subtitle, reuseIdentifier: "cell") 이때 style: _______ 부분을 보면 총 4가지의 옵션이 있는데 아래와 같다. 하나씩 어떤 모양인지 살펴보자 .default 더보기 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var cell = tableView.dequeueReusableCell(withIdentifier: "cell") if cell == n..
원문: https://www.hackingwithswift.com/swift/5.9/convenience-asyncthrowingstream-makestream Swift 5.9의 새로운 기능: AsyncStream과 AsyncThrowingStream의 makeStream 메소드 Swift 5.9에서는 SE-0388이라는 제안을 도입하여, AsyncStream과 AsyncThrowingStream에 makeStream() 메소드를 추가했다. 이 메소드는 스트림과 그 연속성을 동시에 반환하는 기능을 가지고 있다. 여기서 단어의 의미를 한번 짚고 넘어가자면, '스트림'이란 데이터를 순차적으로 처리하는 흐름 같은 걸 의미한다. 그리고 이 데이터들이 어떻게 생성되고 끝나는지를 관리하는 걸 '연속성'이라고 부른..
원문: https://www.hackingwithswift.com/swift/5.9/consume-operator Swift에서 Consume 연산자를 이해하고 사용하기 Swift의 새로운 기능인 consume 연산자는 값의 Lifetime을 명시적으로 끝내는데 사용되며, 이를 통해 개발자가 데이터가 전달될 때 발생하는 불필요한 retain/release 호출을 줄일 수 있다. 기본 사용법 struct User { var name: String } func createUser() { let newUser = User(name: "Anonymous") let userCopy = consume newUser // [✨] print(userCopy.name) } createUser() `// [✨]` 이 주석..
새 맥북에 Xcode 설치했더니 Git 설정이 안되어있다. 다운로드 받을게 많다 ..! 두근두근 차근차근 글로 남겨놔야징 1. Git 홈페이지 방문 https://git-scm.com/download/mac Git - Downloading Package Download for macOS There are several options for installing Git on macOS. Note that any non-source distributions are provided by third parties, and may not be up to date with the latest source release. Choose one of the following options for installing Git..
보호되어 있는 글입니다.
힘들다고 말하면, 누군가 들어준다. 그 마음이 고마워서 다음에 그 사람이 힘들때는 내가 잘 해주고 싶어서 '이제 그만 일어나야겠다'는 생각이 드는 것 같다. 그래서 힘들때 힘들다고 말할 줄 알아야 하고, 또 누가 힘들다고 하면 들어줄 줄 아는 사람이 되어야 한다. 진실된 내 감정을 누군가에게 털어놓는다는 것은 스스로를 위해서 죽음보다는 삶에 가까운 쪽으로 용기를 냈다는 것이다. 내가 먼저 좋은 사람이 되어준다면, 그 사람도 언젠가 나에게 좋은 사람이 되어줄것이기에 늘 먼저 손을 내밀자. 내 손을 맞잡아주지 않더라도 실망하지 말자. 망설이고 있는 시간일지도 모른다. 나의 약점을 인정할 줄 아는 사람 남이 약한 모습을 보일때 야박하게 굴지 않는 사람 난 그런 사람으로 기억되고 싶다.
원문 : https://www.hackingwithswift.com/swift/5.9/noncopyable-structs-and-enums SE-0390에서는 복사할 수 없는 구조체와 열거형 개념을 도입하여 구조체나 열거형의 단일 인스턴스를 여러 곳에서 공유할 수 있게 되었으며, 궁극적으로 소유자는 여전히 한 명이지만 이제 코드의 여러 부분에서 액세스할 수 있게 되었다. 중요: 이 변경 사항에는 여러 가지 미묘한 점이 있으므로 아래에서 명확히 설명하려고 노력했지만, 몇 가지 사항을 몇 번 읽어야 한다고 해도 놀라지 말자. 첫째, 이 변경 사항에는 요구 사항을 억제하는 새로운 구문인 ~Copyable이 도입되었다. 이는 "이 유형은 복사할 수 없습니다"라는 의미이며, 이 억제 구문은 현재 다른 곳에서는 사..
원문 : https://www.hackingwithswift.com/swift/5.9/macros SE-0382, SE-0389, SE-0397이 결합되어 컴파일 시 구문을 변환하는 코드를 생성할 수 있는 '매크로' 기능 C++에서 매크로는 코드를 전처리하는 방법으로, 메인 컴파일러가 코드를 보기 전에 코드의 텍스트 교체를 효과적으로 수행하여 손으로 작성하고 싶지 않은 코드를 생성할 수 있다. Swift의 매크로는 이와 비슷하지만 훨씬 더 강력하며, 따라서 훨씬 더 복잡하다. 또한 매크로를 사용하면 프로젝트의 Swift 코드가 컴파일되기 전에 동적으로 조작할 수 있으므로 컴파일 시점에 추가 기능을 삽입할 수 있다. 핵심 사항: 매크로는 단순한 문자열 대체가 아닌 유형 안전성이 있으므로 매크로가 작동할 데..
원문 : https://www.hackingwithswift.com/swift/5.9/if-switch-expressions 기능 매개변수 팩으로 다양한 타입을 묶어 사용하기 struct FrontEndDev { var name: String } struct BackEndDev { var name: String } struct FullStackDev { var name: String } 위와 같은 구조체 3개가 있다고 가정해보자. let johnny = FrontEndDev(name: "Johnny Appleseed") let jess = FrontEndDev(name: "Jessica Appleseed") let kate = BackEndDev(name: "Kate Bell") let kevin = B..
원문 : https://www.hackingwithswift.com/swift/5.9/if-switch-expressions 기능 if 와 switch를 표현식으로 사용할 수 있게 되었다. // if 문 예시 let score = 800 let simpleResult = if score > 500 { "Pass" } else { "Fail" } print(simpleResult) // switch 문 예시 let complexResult = switch score { case 0...300: "Fail" case 301...500: "Pass" case 501...800: "Merit" default: "Distinction" } print(complexResult) 이를 함수에 응용하면 아래와 같이 쓸..
- Total
- Today
- Yesterday
- 자바
- UITableViewCell
- 이코테
- 핵심내용
- swift5.9
- ios
- 의존성
- CellStyle
- 꼼꼼한 재은 씨의 스위프트 문법편
- AsyncSwift Korea Seminar
- SWIFT
- it seminar
- 싱글톤
- Swift Conference
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |