안녕하세요. 강사님 메모앱을 실습하던중에 질문 사항이 있어 이렇게 글을 올립니다. 그룹을 선택하면 그 그룹에 속한 메모들이 제대로 보이긴 한데, 그게 때에 따라서 틀려진다는게 이해할 수가 없어서 질문드립니다. 제가 어디서 잘못 코딩을 했는지 그 부분을 찾지를 못했습니다. 그래서 이미지라도 올립니다. 위 그림 처럼 같은 그룹인데도 그룹을 클릭할때마다 메모 리스트의 항목이 틀리게 나옵니다. 한번 봐주시면 감사하겠습니다.
자주하는 질문 모음 링크: https://pointed-earwig-996.notion.site/Swift-Concurrency-for-Swift-6-Part-1-22eecb0b83154ac28c7c66446f6e54e1?pvs=4 자주하는 질문을 먼저 확인 부탁드리며, 질문은 최대한 구체적으로하셔야 빠르게 답변드릴 수 있습니다. [질문 예시] (1) 몇강, 몇초의 내용이 잘 이해가 안갑니다. (제가 적어놓은 강의 번호 "10강, 7분 강의 내용 중에... " ) (2) 강의자료 몇페이지의 내용이 잘 이해가 안갑니다. (3) 정확하게 어떤 포인트에 대한 내용이 이해가 안갑니다. 다시 설명해주실 수 있나요? 동시성 강의 코드파일 7번(7-StructuredConcurrency(102, 103줄) ) 내용인데요 전체코드 func fetchAsyncLetTwoImages() async throws -> (UIImage, UIImage) { let start = Date() /// 구조적 동시성 작업의 생성 (하위 작업의 생성) async let image1 = try await fetchImage(num: 1) async let image2 = try await fetchImage(num: 2) let images = try await (image1, image2) print(Date().timeIntervalSince(start).formatted(.number.precision(.fractionLength(1)))) return images } 이렇게 되어 있는데 async let image1 위치에서 fetchImage(num:1)의 값을 기다리는 형태입니다. 아마도 이렇게 바뀌는게 맞지 않나 싶습니다. /// 구조적 동시성 작업의 생성 (하위 작업의 생성) async let image1 = fetchImage(num: 1) async let image2 = fetchImage(num: 2) 그런데 위의 코드는 순서대로 결과값을 받는 경우이고 아래 코드는 동시에 돌려서 빨리 나오는 결과값이 먼저 반영되나 싶었는데 그것도 애매하네요. A코드 /// 구조적 동시성 작업의 생성 (하위 작업의 생성) async let image1 = try await fetchImage(num: 1) async let image2 = try await fetchImage(num: 2) B코드 /// 구조적 동시성 작업의 생성 (하위 작업의 생성) async let image1 = fetchImage(num: 1) async let image2 = fetchImage(num: 2) 실제로 두 코드를 돌려보니 A코드는 4.8 ~ 3.2초 걸렸는데 대략 평균적으로 3.6초 걸리고, B코드는 4.2 ~ 2.5초 걸려서 대략 평균적으로 3.3초 정도 걸리더라구요. image1과 image2는 try await Task.sleep(for: .seconds(2))가 걸려 있어 각각 2초씩이어서 동시에 돌아가서 결과를 받으면 2초 조금 넘을 것 같고 순서대로 받으면 4초 조금 넘을 것입니다. 그런데 두 코드 모두 4초가 안걸리는 경우가 많았다는 점에서 동시성이 적용되는 것 같습니다. 그런데 어떤 속도의 차이가 있을까 했는데 별 차이가 없는 느낌이기도 합니다. Claude에게 물어보니 A코드가 동시성의 효과를 보지 못한다고 하지만 속도 면에서 B코드가 특별히 빠르다고 단정하기도 애매해서요. 오타라고 생각되지만 A코드는 어떤 의미가 있을까 궁금합니다.
앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
뒤에 설명이 나오는지는 아직 모르겠는데 수강자 분들 참고하시라고 적어놓습니다... 강의에서 @IBAction 함수 선언할 때 sender Type 을 Any 에서 UIButton 으로 변경하는데 그 이유가 이건 sender 의 타입이 UIButton 이라는 걸 명확하게 하는 거라고 보면 되고 Any 로 놔두면 나중에 sender 를 써야할 때는 타입캐스팅을 해야 사용이 가능합니다. [UIButton] 인 경우 sender.backgroundColor = ... [Any] 인 경우 if let myButton = sender as? UIButton { sender.backgroundColor }
iphone 기종 : 6S ios 버전 : 14.4.2 현재, 사진과 같이 3uTools 실행 후 Files에 들어가면 뱅글뱅글 돌면서 디렉토리 구조가 표시되지 않고 에러코드 13을 반환하고 있습니다. 혹시 이 문제에 대한 해결 방법을 알고 계실까요? conduit 2와 filza는 모두 설치된 상태이며, 케이블도 정품 케이블을 사용 중입니다. window에서 진행해도 동일했습니다.
{ "Information": "We have detected your API key as G46I847RIDQ4081U and our standard API rate limit is 25 requests per day. Please subscribe to any of the premium plans at https://www.alphavantage.co/premium/ to instantly remove all daily rate limits." } 하루 제한량 25회로 인해 테스트하기가 힘드네요.. IP 기반 검증인지 API key를 새로 발급받아도 똑같습니다. CompanyListings뿐만 아니라 ComapnyInfo와 IntradayInfo도 로컬 캐싱을 해놔야 테스트/실습이 용이해보입니다 ㅠ
안녕하세요! 3강 6분 30초 부터 “func2가 스레드 제어권을 운영체제에 양보했다가 func2의 실행이 끝나면 재개되고 함수가 리턴” 이라는 내용이 나오는데요. 관련하여 아래 세 가지 문의 드립니다. 재개 <- 운영체제에서 func2로 스레드 제어권이 돌아온다는 건가요? 어떤 의미로 쓰인 말인지 궁금합니다. func2가 리턴 될 때 스레드 제어권이 func2에 있었다면(1의 상황), 리턴 시점에 제어권도 func1로 돌아가는 게 맞나요? 결과적으로 func2가 리턴 될 때 스레드 제어권이 func2에서 func1로 양도되는 것은 GDC / Swift Concurrency 동일한건가요? 답변 주시면 감사하겠습니다. (_ _)
안녕하세요! 영상에서처럼 과거에는 한글입력이 어려웠는데, 이번에 새로 맥미니 m4를 구매한 후 최신 xcode를 사용해서 다시 공부하던 중입니다. 시뮬레이터가 오히려 지금 한글은 입력이 잘되는데(자간 모음 글자형태로 잘 만들어짐) 영어가 입력이 안되네요,,,, 시스템상에서 한/영 은 잘 왔다갔다하고, 다른 웹이나 프로그램에선 한/영 잘 되는데, 시뮬레이터 안에서만 영어가 입력이 안되는건 혹시 어떤 문제인지 아실까요?
안녕하세요. 10강 내용 중 질문이 있습니다. 6분 20초 정도 시간대인데요. 위 코드의 106 line에서의 쓰레드가 2번 쓰레드일 경우, doSomething() 메서드 자체가 2번 쓰레드에서 실행된다고 말씀하셨는데요. doSomething() 메서드가 2번쓰레드에서 실행될지, 다른 쓰레드에서 실행될지는 알 수 없는 것 아닌가요? 즉, async 메서드가 실행되는 쓰레드와 await 호출 직전 시점의 쓰레드가 반드시 같지는 않을 수도 있는 것으로 알고있어서 질문드립니다. 감사합니다.
안녕하세요, ImageProject 관련하여 설명해주신 내용 중 궁금한 점이 있어 문의드립니다. 1. await imageDownloader.cache.keys.contains(url) 와 let keys = await imageDownloader.cache.keys if keys.contains(url) 중에 후자를 사용하는 것이 액터 재진입에 있어 더욱 안정적인 코드라고 말씀하셨는데요 액터 재진입 관점에서는 전자의 코드가 actor isolated 된 상태에서 contain 여부까지 확인이 되고 후자의 코드는 key값을 가져오고 contain 여부를 판단하는 시점에 actor에 다른 태스크가 진입하여 값이 변경될 가능성이 있기 때문에 전자가 더 안정적인 코드가 아닌가요? 어떤 이유 때문에 후자의 코드를 사용해야하는지 다시 설명해주시면 감사하겠습니다. 2. private let storage = DiskStorage() 의 코드는 Global actor 'ImageDatabase'-isolated default value in a actor-isolated context 오류를 발생시켜 storage를 추후에 초기화 하도록 수정해주셨는데요 private lazy var storage = DiskStorage() 으로 하면 storage가 호출되는 시점에 초기화 되니 그 때에는 이미 actor의 격리영역이 정해진 상태라 이상이 없을 것이라고 생각했습니다만 같은 오류가 발생하더라구요. @ImageDatabase 로 격리되어 있기 때문에 비동기적으로 초기화되어야 하지만 그렇지 못하기 때문에 오류가 발생하는 것인지 궁금합니다. 감사합니다.
.net maui 9.0 환경입니다. hyper 관련 에러가 떠서 강의따라서 갔더니 에러는 더이상 뜨지않았습니다. 하지만 안드로이드로 빌드를 할 시에 빌드만 30분 넘게걸리고 결국 실행되지않았습니다. (안드로이드 에뮬레이터는 실행됨, 하지만 무한로딩) 나중에는 xa0010: 선택한 디바이스가 실행되고 있지 않습니다. 이런 에러가 뜹니다. 이런 경우 어떻게 해야할까요?
안녕하세요. 강의를 통해 많은 도움을 받고 있습니다.! 다름이 아니라, 17강 - 11분20초 부분에서 "작업의 결과를 모을 때는 하나의 thread에서만 동작하게 됩니다. 예를 들자면 2번 thread 하나에서만 비동기 반복문이 동작하게 되는거에요" 라고 설명을 해 주셨는데 제가 이해한 바로는 'Swift Concurrency는 thread관점에서 벗어나서, Task라는 작업의 단위를 기준으로 비동기 관리를 한다' 라고 이해하고 있습니다. 때문에, "비동기 반복문에서도 await을 통해 비동기 결과를 받고 있는데, 이 때 특정 thread에 고정된다는 것이 보장 될 수 있는건가?" 하는 궁금증이 생겨서 질문드립니다! 만약 하나의 thread에 고정되어 있다면, group을 통해서 결과가 넘어오게 될 때, 자식 Task중 과도하게 오래걸리는 작업이 있다고 가정하면 비동기 반복문이 실행되는 특정 thread가 계속 blocking되는건가? 하는 의문이 들어서요,,,!
강의 너무 잘 듣고 있습니다! 강의를 듣고 앱을 만들어보고 apk, aab파일로 뽑아서 앱을 실행할 경우 간헐적으로 아래와 같이 버튼이 잘리고 텍스트가 사라지는 현상이 일어납니다. 텍스트가 사라지지 않는 버튼은 텍스트를 감싸는 패딩?이 사라져서 엄청 작아지곤 합니다. 이게 항상 그러는게 아니라 간헐적으로 이러는데 혹시 이런 현상을 경험해보신적이 있으시면 해결 방법 공유해주시면 감사하겠습니다 ㅠㅜ 구글링이나 ai한테 물어봐도 해결이 잘 안 되서 쉽지 않네요 ㅠ 덕분에 플러터 실력이 많이 늘고 있습니다!! 감사합니다.
강의 관련된 질문은 언제나 환영입니다 😄 코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요) 마크다운을 사용해서 편리하게 글을 작성하세요 먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~ 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요 LocalViewBuilder에서 numberPlate에 ViewBuilder 매크로를 사용해야되는 이유를 LocalViewBuilder에 선언된 ViewType을 사용하려면 이라고 설명해주셨는 데, 그것과는 상관없이 numberPlate 안에서 분기 처리된 항목들(view1, view2, view3)이 다 다른 타입(Text, VStack, Image)이라서 ViewBuilder 매크로를 사용해야되는 것이 아닐까요 ?? 설명 듣다가 헷갈려서 질문드립니다.